diff --git a/CKPE.Fallout4/CKPE.Fallout4.vcxproj b/CKPE.Fallout4/CKPE.Fallout4.vcxproj
index d92b96c8..043296f6 100644
--- a/CKPE.Fallout4/CKPE.Fallout4.vcxproj
+++ b/CKPE.Fallout4/CKPE.Fallout4.vcxproj
@@ -422,6 +422,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CKPE.Fallout4/CKPE.Fallout4.vcxproj.filters b/CKPE.Fallout4/CKPE.Fallout4.vcxproj.filters
index 74c79956..a3132e14 100644
--- a/CKPE.Fallout4/CKPE.Fallout4.vcxproj.filters
+++ b/CKPE.Fallout4/CKPE.Fallout4.vcxproj.filters
@@ -981,6 +981,522 @@
EditorAPI\T
+
+ EditorAPI\A
+
+
+ EditorAPI\A
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\B
+
+
+ EditorAPI\E
+
+
+ EditorAPI\E
+
+
+ EditorAPI\F
+
+
+ EditorAPI\G
+
+
+ EditorAPI\I
+
+
+ EditorAPI\M
+
+
+ EditorAPI\N
+
+
+ EditorAPI\N
+
+
+ EditorAPI\N
+
+
+ EditorAPI\S
+
+
+ EditorAPI\S
+
+
+ EditorAPI\S
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
+
+ EditorAPI\T
+
diff --git a/CKPE.Fallout4/Include/EditorAPI/A/ActorValueInfo.h b/CKPE.Fallout4/Include/EditorAPI/A/ActorValueInfo.h
new file mode 100644
index 00000000..036c8b3c
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/A/ActorValueInfo.h
@@ -0,0 +1,50 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x1A8, vtable RVA 0x2FF4C90, 124 virtual functions
+ class ActorValueInfo :
+ public TESForm, // 000
+ public TESFullName, // 028
+ public TESDescription // 040
+ {
+ public:
+ virtual ~ActorValueInfo() = default;
+
+ public:
+ ActorValueInfo* dependentActorValues[15]; // 68
+ std::uint8_t derivationFunction[0x40]; // E0 - std::function (MSVC layout: 0x38 small-object storage + impl pointer)
+ const char* enumNames[10]; // 120
+ BGSLocalizedString abbreviation; // 170
+ std::int32_t oldActorValue; // 180
+ std::int32_t flags; // 184 - REX::TEnumSet
+ std::int32_t avType; // 188 - REX::TEnumSet
+ std::uint32_t numDependentActorValues; // 18C
+ std::uint32_t enumCount; // 190
+ std::int32_t fullCacheIndex; // 194
+ std::int32_t permanentCacheIndex; // 198
+ float defaultValue; // 19C
+ std::uint32_t sortIndex; // 1A0
+ std::uint32_t unk1A4; // 1A4
+ };
+ static_assert(sizeof(ActorValueInfo) == 0x1A8);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/A/AlchemyItem.h b/CKPE.Fallout4/Include/EditorAPI/A/AlchemyItem.h
new file mode 100644
index 00000000..430376d4
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/A/AlchemyItem.h
@@ -0,0 +1,58 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x450, vtable RVA 0x30BC3C8, 188 virtual functions
+ class AlchemyItem :
+ public MagicItem, // 000
+ public BGSModelMaterialSwap, // 2D0
+ public TESIcon, // 320
+ public BGSMessageIcon, // 348
+ public TESWeightForm, // 378
+ public BGSEquipType, // 388
+ public BGSDestructibleObjectForm, // 398
+ public BGSPickupPutdownSounds, // 3A8
+ public BGSCraftingUseSound, // 3C0
+ public TESDescription // 3D0
+ {
+ public:
+ virtual ~AlchemyItem() = default;
+
+ public:
+ std::uint32_t unk3F8; // 3F8
+ std::uint32_t unk3FC; // 3FC
+ std::uint64_t unk400; // 400
+ std::uint32_t unk408; // 408
+ std::uint32_t unk40C; // 40C
+ std::uint64_t unk410; // 410
+ BGSLocalizedString unk418; // 418
+ TESIcon unk428; // 428
+ };
+ static_assert(sizeof(AlchemyItem) == 0x450);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSAcousticSpace.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSAcousticSpace.h
new file mode 100644
index 00000000..252de688
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSAcousticSpace.h
@@ -0,0 +1,41 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSSoundDescriptorForm;
+ class TESRegion;
+ class BGSReverbParameters;
+
+ // 1.11.240.0: size 0xB0, vtable RVA 0x3054008, 154 virtual functions
+ class BGSAcousticSpace :
+ public TESBoundObject // 000
+ {
+ public:
+ virtual ~BGSAcousticSpace() = default;
+
+ public:
+ BGSSoundDescriptorForm* loopingSound; // 90
+ TESRegion* soundRegion; // 98
+ BGSReverbParameters* reverbType; // A0
+ std::uint16_t weatherAttenMillibels; // A8
+ bool isInterior; // AA
+ std::uint8_t unkAB[0x5]; // AB
+ };
+ static_assert(sizeof(BGSAcousticSpace) == 0xB0);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSAction.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSAction.h
new file mode 100644
index 00000000..43a7de08
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSAction.h
@@ -0,0 +1,33 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x68, vtable RVA 0x302F038, 124 virtual functions
+ class BGSAction :
+ public BGSKeyword // 000
+ {
+ public:
+ virtual ~BGSAction() = default;
+
+ public:
+ std::uint32_t index; // 60
+ std::uint32_t unk64; // 64
+ };
+ static_assert(sizeof(BGSAction) == 0x68);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSAddonNode.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSAddonNode.h
new file mode 100644
index 00000000..5f63e8dd
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSAddonNode.h
@@ -0,0 +1,49 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSSoundDescriptorForm;
+ class TESObjectLIGH;
+
+ struct ADDON_DATA
+ {
+ std::uint16_t masterParticleCap; // 00
+ std::int8_t flags; // 02
+ };
+ static_assert(sizeof(ADDON_DATA) == 0x4);
+
+ // 1.11.240.0: size 0x100, vtable RVA 0x307DA18, 154 virtual functions
+ class BGSAddonNode :
+ public TESBoundObject, // 000
+ public BGSModelMaterialSwap // 090
+ {
+ public:
+ virtual ~BGSAddonNode() = default;
+
+ public:
+ std::uint32_t index; // E0
+ std::uint32_t unkE4; // E4
+ BGSSoundDescriptorForm* sound; // E8
+ TESObjectLIGH* light; // F0
+ ADDON_DATA data; // F8
+ std::uint8_t masterParticleLock[0x4]; // FC - BSNonReentrantSpinLock
+ };
+ static_assert(sizeof(BGSAddonNode) == 0x100);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSAimModel.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSAimModel.h
new file mode 100644
index 00000000..5603205a
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSAimModel.h
@@ -0,0 +1,53 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ struct BGSAimModelData
+ {
+ float aimModelMinConeDegrees; // 00
+ float aimModelMaxConeDegrees; // 04
+ float aimModelConeIncreasePerShot; // 08
+ float aimModelConeDecreasePerSec; // 0C
+ std::uint32_t aimModelConeDecreaseDelayMs; // 10
+ float aimModelConeSneakMultiplier; // 14
+ float aimModelRecoilDiminishSpringForce; // 18
+ float aimModelRecoilDiminishSightsMult; // 1C
+ float aimModelRecoilMaxDegPerShot; // 20
+ float aimModelRecoilMinDegPerShot; // 24
+ float aimModelRecoilHipMult; // 28
+ std::uint32_t aimModelRecoilShotsForRunaway; // 2C
+ float aimModelRecoilArcDeg; // 30
+ float aimModelRecoilArcRotateDeg; // 34
+ float aimModelConeIronSightsMultiplier; // 38
+ float aimModelBaseStability; // 3C
+ };
+ static_assert(sizeof(BGSAimModelData) == 0x40);
+
+ // 1.11.240.0: size 0x68, vtable RVA 0x2FBC948, 124 virtual functions
+ class BGSAimModel :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSAimModel() = default;
+
+ public:
+ BGSAimModelData aimModelData; // 28 - DNAM
+ };
+ static_assert(sizeof(BGSAimModel) == 0x68);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSArtObject.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSArtObject.h
new file mode 100644
index 00000000..217c5eb8
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSArtObject.h
@@ -0,0 +1,37 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x108, vtable RVA 0x307E3E8, 154 virtual functions
+ class BGSArtObject :
+ public TESBoundObject, // 000
+ public BGSKeywordForm, // 090
+ public BGSModelMaterialSwap // 0B0
+ {
+ public:
+ virtual ~BGSArtObject() = default;
+
+ public:
+ std::uint32_t unk100; // 100
+ std::uint32_t unk104; // 104
+ };
+ static_assert(sizeof(BGSArtObject) == 0x108);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSAssociationType.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSAssociationType.h
new file mode 100644
index 00000000..6c38fa6d
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSAssociationType.h
@@ -0,0 +1,35 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x50, vtable RVA 0x302F698, 124 virtual functions
+ class BGSAssociationType :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSAssociationType() = default;
+
+ public:
+ BSFixedString associationLabel[2][2]; // 28 - BSFixedStringCS
+ std::uint32_t flags; // 48 - REX::TEnumSet
+ std::uint32_t unk4C; // 4C
+ };
+ static_assert(sizeof(BGSAssociationType) == 0x50);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSAttachParentArray.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSAttachParentArray.h
new file mode 100644
index 00000000..206a2c98
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSAttachParentArray.h
@@ -0,0 +1,33 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ // 1.11.240.0: size 0x20, vtable RVA 0x2FA5CE0, 21 virtual functions
+ class BGSAttachParentArray :
+ public BaseFormComponent // 000
+ {
+ public:
+ virtual ~BGSAttachParentArray() = default;
+
+ public:
+ std::uint16_t* array; // 08 - BGSTypedKeywordValue*, keyword indices
+ std::uint32_t size; // 10
+ std::uint32_t unk14; // 14
+ std::uint32_t unk18; // 18 - CK only (not in CommonLibF4)
+ std::uint32_t unk1C; // 1C
+ };
+ static_assert(sizeof(BGSAttachParentArray) == 0x20);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSAttackDataForm.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSAttackDataForm.h
new file mode 100644
index 00000000..f4f14f63
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSAttackDataForm.h
@@ -0,0 +1,31 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ class BGSAttackDataMap;
+
+ // 1.11.240.0: size 0x10, vtable RVA 0x3018670, 21 virtual functions
+ class BGSAttackDataForm :
+ public BaseFormComponent // 000
+ {
+ public:
+ virtual ~BGSAttackDataForm() = default;
+
+ public:
+ BGSAttackDataMap* attackDataMap; // 08 - NiPointer
+ };
+ static_assert(sizeof(BGSAttackDataForm) == 0x10);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSAttractionRule.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSAttractionRule.h
new file mode 100644
index 00000000..4a0109b1
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSAttractionRule.h
@@ -0,0 +1,42 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ struct ATTRACTION_RULE_DATA
+ {
+ float radius; // 00
+ float minDelay; // 04
+ float maxDelay; // 08
+ bool requiresLOS; // 0C
+ bool combatTarget; // 0D
+ };
+ static_assert(sizeof(ATTRACTION_RULE_DATA) == 0x10);
+
+ // 1.11.240.0: size 0x38, vtable RVA 0x2FB50F0, 124 virtual functions
+ class BGSAttractionRule :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSAttractionRule() = default;
+
+ public:
+ ATTRACTION_RULE_DATA data; // 28
+ };
+ static_assert(sizeof(BGSAttractionRule) == 0x38);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSAudioEffectChain.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSAudioEffectChain.h
new file mode 100644
index 00000000..68fee4a1
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSAudioEffectChain.h
@@ -0,0 +1,36 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x48, vtable RVA 0x2FB7660, 124 virtual functions
+ class BGSAudioEffectChain :
+ public TESForm, // 000
+ public BSIAudioEffectChain // 028
+ {
+ public:
+ virtual ~BGSAudioEffectChain() = default;
+
+ public:
+ BSTArray effects; // 30 - BSTArray
+ };
+ static_assert(sizeof(BGSAudioEffectChain) == 0x48);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSBehaviorGraphModel.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSBehaviorGraphModel.h
new file mode 100644
index 00000000..5ce65c26
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSBehaviorGraphModel.h
@@ -0,0 +1,26 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ // 1.11.240.0: size 0x38, vtable RVA 0x304C7B8, 27 virtual functions
+ class BGSBehaviorGraphModel :
+ public TESModel // 000
+ {
+ public:
+ virtual ~BGSBehaviorGraphModel() = default;
+ };
+ static_assert(sizeof(BGSBehaviorGraphModel) == 0x38);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSBendableSpline.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSBendableSpline.h
new file mode 100644
index 00000000..88d998e6
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSBendableSpline.h
@@ -0,0 +1,48 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSTextureSet;
+
+ struct SplineData
+ {
+ float numTiles; // 00
+ std::uint16_t numSlices; // 04
+ std::uint16_t flags; // 06
+ NiAPI::NiColor color; // 08
+ float windSensibility; // 14
+ float flexibility; // 18
+ };
+ static_assert(sizeof(SplineData) == 0x1C);
+
+ // 1.11.240.0: size 0xB8, vtable RVA 0x2FBD638, 154 virtual functions
+ class BGSBendableSpline :
+ public TESBoundObject // 000
+ {
+ public:
+ virtual ~BGSBendableSpline() = default;
+
+ public:
+ SplineData data; // 90
+ std::uint32_t unkAC; // AC
+ BGSTextureSet* textureSet; // B0
+ };
+ static_assert(sizeof(BGSBendableSpline) == 0xB8);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSBipedObjectForm.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSBipedObjectForm.h
new file mode 100644
index 00000000..7b4b0878
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSBipedObjectForm.h
@@ -0,0 +1,32 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ // 1.11.240.0: size 0x10, vtable RVA 0x3018898, 22 virtual functions
+ class BGSBipedObjectForm :
+ public BaseFormComponent // 000
+ {
+ public:
+ virtual ~BGSBipedObjectForm() = default;
+
+ virtual bool FillsBipedSlot(std::int32_t nBipedSlot) const noexcept(true) { return false; } // 21 - RVA 0x88BA90, if ( a2 >= 32 ); return 0;; v3 = *(_DWORD *)(a1 + 8);; return _bittest(&v3, a2);
+
+ public:
+ std::uint32_t bipedModelData; // 08 - BIPED_MODEL, biped slot mask
+ std::uint32_t unk0C; // 0C
+ };
+ static_assert(sizeof(BGSBipedObjectForm) == 0x10);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSBlockBashData.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSBlockBashData.h
new file mode 100644
index 00000000..6e7f0adc
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSBlockBashData.h
@@ -0,0 +1,36 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSImpactDataSet;
+ class BGSMaterialType;
+ }
+
+ // 1.11.240.0: size 0x18, vtable RVA 0x30189E8, 21 virtual functions
+ class BGSBlockBashData :
+ public BaseFormComponent // 000
+ {
+ public:
+ virtual ~BGSBlockBashData() = default;
+
+ public:
+ Forms::BGSImpactDataSet* blockBashImpactDataSet; // 08
+ Forms::BGSMaterialType* altBlockMaterialType; // 10
+ };
+ static_assert(sizeof(BGSBlockBashData) == 0x18);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSBodyPartData.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSBodyPartData.h
new file mode 100644
index 00000000..76c12167
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSBodyPartData.h
@@ -0,0 +1,41 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0xA0, vtable RVA 0x3030C60, 124 virtual functions
+ class BGSBodyPartData :
+ public TESForm, // 000
+ public TESModel, // 028
+ public BGSPreloadable // 060
+ {
+ public:
+ virtual ~BGSBodyPartData() = default;
+
+ public:
+ std::uint8_t unk68[0x10]; // 68
+ std::uint64_t unk78; // 78
+ std::uint64_t unk80; // 80
+ std::uint64_t unk88; // 88
+ std::uint64_t unk90; // 90
+ std::uint64_t unk98; // 98
+ };
+ static_assert(sizeof(BGSBodyPartData) == 0xA0);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSCameraPath.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSCameraPath.h
new file mode 100644
index 00000000..b946e1b0
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSCameraPath.h
@@ -0,0 +1,45 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ struct PATH_DATA
+ {
+ std::int8_t flags; // 00
+ };
+ static_assert(sizeof(PATH_DATA) == 0x1);
+
+ // 1.11.240.0: size 0x70, vtable RVA 0x3054830, 124 virtual functions
+ class BGSCameraPath :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSCameraPath() = default;
+
+ public:
+ std::uint8_t unk28[0x18]; // 28
+ std::uint64_t unk40; // 40
+ std::uint64_t unk48; // 48
+ PATH_DATA data; // 50
+ std::uint8_t unk51[0x7]; // 51
+ std::uint64_t unk58; // 58
+ std::uint64_t unk60; // 60
+ std::uint64_t unk68; // 68
+ };
+ static_assert(sizeof(BGSCameraPath) == 0x70);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSCameraShot.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSCameraShot.h
new file mode 100644
index 00000000..ab9ac905
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSCameraShot.h
@@ -0,0 +1,59 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ struct CAMERA_SHOT_DATA
+ {
+ std::int32_t cameraAction; // 00 - REX::TEnumSet
+ std::int32_t location; // 04 - REX::TEnumSet
+ std::int32_t target; // 08 - REX::TEnumSet
+ std::uint32_t flags; // 0C
+ float playerTimeMult; // 10
+ float targetTimeMult; // 14
+ float globalTimeMult; // 18
+ float maxTime; // 1C
+ float minTime; // 20
+ float targetPercentBetweenActors; // 24
+ float nearTargetDistance; // 28
+ float locationSpring; // 2C
+ float targetSpring; // 30
+ float rotationOffsetX; // 34
+ float rotationOffsetY; // 38
+ float rotationOffsetZ; // 3C
+ };
+ static_assert(sizeof(CAMERA_SHOT_DATA) == 0x40);
+
+ // 1.11.240.0: size 0xC8, vtable RVA 0x30553E0, 124 virtual functions
+ class BGSCameraShot :
+ public TESForm, // 000
+ public TESModel, // 028
+ public TESImageSpaceModifiableForm // 060
+ {
+ public:
+ virtual ~BGSCameraShot() = default;
+
+ public:
+ CAMERA_SHOT_DATA data; // 70
+ std::uint8_t conditions[0x8]; // B0 - TESCondition
+ std::uint8_t unkB8[0x10]; // B8
+ };
+ static_assert(sizeof(BGSCameraShot) == 0xC8);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSCollisionLayer.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSCollisionLayer.h
new file mode 100644
index 00000000..ff6273ac
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSCollisionLayer.h
@@ -0,0 +1,40 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x80, vtable RVA 0x3055BC8, 124 virtual functions
+ class BGSCollisionLayer :
+ public TESForm, // 000
+ public TESDescription // 028
+ {
+ public:
+ virtual ~BGSCollisionLayer() = default;
+
+ public:
+ std::uint32_t collisionIdx; // 50
+ std::uint8_t unk54[0xC]; // 54
+ BSFixedString name; // 60
+ BSTArray collidesWith; // 68 - BSTArray
+ };
+ static_assert(sizeof(BGSCollisionLayer) == 0x80);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSComponent.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSComponent.h
new file mode 100644
index 00000000..310e4862
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSComponent.h
@@ -0,0 +1,42 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class TESGlobal;
+ class TESObjectMISC;
+
+ // 1.11.240.0: size 0xD8, vtable RVA 0x2FB8400, 154 virtual functions
+ class BGSComponent :
+ public TESBoundObject, // 000
+ public TESFullName, // 090
+ public TESValueForm, // 0A8
+ public BGSCraftingUseSound // 0B8
+ {
+ public:
+ virtual ~BGSComponent() = default;
+
+ public:
+ TESGlobal* modScrapScalar; // C8
+ TESObjectMISC* scrapItem; // D0
+ };
+ static_assert(sizeof(BGSComponent) == 0xD8);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSConstructibleObject.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSConstructibleObject.h
new file mode 100644
index 00000000..ac3695be
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSConstructibleObject.h
@@ -0,0 +1,51 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ struct ConstructibleObjectData
+ {
+ std::uint16_t numConstructed; // 00
+ std::uint16_t workshopPriority; // 02
+ };
+ static_assert(sizeof(ConstructibleObjectData) == 0x4);
+
+ // 1.11.240.0: size 0xB0, vtable RVA 0x307EED8, 124 virtual functions
+ class BGSConstructibleObject :
+ public TESForm, // 000
+ public BGSPickupPutdownSounds, // 028
+ public TESDescription // 040
+ {
+ public:
+ virtual ~BGSConstructibleObject() = default;
+
+ public:
+ void* requiredItems; // 68 - BSTArray>*
+ std::uint8_t unk70[0x18]; // 70
+ std::uint64_t unk88; // 88
+ std::uint64_t unk90; // 90
+ ConstructibleObjectData data; // 98
+ std::uint32_t unk9C; // 9C
+ std::uint64_t unkA0; // A0
+ std::uint32_t unkA8; // A8
+ std::uint32_t unkAC; // AC
+ };
+ static_assert(sizeof(BGSConstructibleObject) == 0xB0);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSCraftingUseSound.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSCraftingUseSound.h
new file mode 100644
index 00000000..9acb63a4
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSCraftingUseSound.h
@@ -0,0 +1,34 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSSoundDescriptorForm;
+ }
+
+ // 1.11.240.0: size 0x10, vtable RVA 0x2FA6BA8, 21 virtual functions
+ class BGSCraftingUseSound :
+ public BaseFormComponent // 000
+ {
+ public:
+ virtual ~BGSCraftingUseSound() = default;
+
+ public:
+ Forms::BGSSoundDescriptorForm* craftingUseSound; // 08
+ };
+ static_assert(sizeof(BGSCraftingUseSound) == 0x10);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSDamageType.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSDamageType.h
new file mode 100644
index 00000000..01a8cfaa
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSDamageType.h
@@ -0,0 +1,37 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class ActorValueInfo;
+
+ class MagicItem;
+
+ // 1.11.240.0: size 0x38, vtable RVA 0x2FB91D0, 124 virtual functions
+ class BGSDamageType :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSDamageType() = default;
+
+ public:
+ ActorValueInfo* resistance; // 28
+ MagicItem* spell; // 30
+ };
+ static_assert(sizeof(BGSDamageType) == 0x38);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSDebris.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSDebris.h
new file mode 100644
index 00000000..82405452
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSDebris.h
@@ -0,0 +1,34 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x40, vtable RVA 0x307FC28, 124 virtual functions
+ class BGSDebris :
+ public TESForm, // 000
+ public BGSPreloadable // 028
+ {
+ public:
+ virtual ~BGSDebris() = default;
+
+ public:
+ BSSimpleList dataList; // 30 - BSSimpleList
+ };
+ static_assert(sizeof(BGSDebris) == 0x40);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSDefaultObject.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSDefaultObject.h
new file mode 100644
index 00000000..3a669ef8
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSDefaultObject.h
@@ -0,0 +1,37 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class TESForm;
+
+ // 1.11.240.0: size 0x40, vtable RVA 0x2FB9800, 124 virtual functions
+ class BGSDefaultObject :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSDefaultObject() = default;
+
+ public:
+ TESForm* form; // 28
+ std::uint8_t type[0x8]; // 30 - ENUM_FORM_ID
+ BSFixedString formEditorID; // 38
+ };
+ static_assert(sizeof(BGSDefaultObject) == 0x40);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSDefaultObjectManager.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSDefaultObjectManager.h
new file mode 100644
index 00000000..7dea236c
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSDefaultObjectManager.h
@@ -0,0 +1,35 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x1A78, vtable RVA 0x3059BA8, 124 virtual functions
+ class BGSDefaultObjectManager :
+ public TESForm, // 000
+ public BSTSingletonImplicit // 028
+ {
+ public:
+ virtual ~BGSDefaultObjectManager() = default;
+
+ public:
+ std::uint8_t unk28[0xC60]; // 28
+ std::uint8_t unkC88[0xDF0]; // C88
+ };
+ static_assert(sizeof(BGSDefaultObjectManager) == 0x1A78);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSDestructibleObjectForm.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSDestructibleObjectForm.h
new file mode 100644
index 00000000..588f86a1
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSDestructibleObjectForm.h
@@ -0,0 +1,31 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ class DestructibleObjectData;
+
+ // 1.11.240.0: size 0x10, vtable RVA 0x3018D38, 21 virtual functions
+ class BGSDestructibleObjectForm :
+ public BaseFormComponent // 000
+ {
+ public:
+ virtual ~BGSDestructibleObjectForm() = default;
+
+ public:
+ DestructibleObjectData* data; // 08
+ };
+ static_assert(sizeof(BGSDestructibleObjectForm) == 0x10);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSDialogueBranch.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSDialogueBranch.h
new file mode 100644
index 00000000..1b5fdd89
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSDialogueBranch.h
@@ -0,0 +1,45 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class TESQuest;
+ class TESTopic;
+
+ // 1.11.240.0: size 0x68, vtable RVA 0x3031BB0, 124 virtual functions
+ class BGSDialogueBranch :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSDialogueBranch() = default;
+
+ public:
+ std::uint32_t flags; // 28
+ std::uint32_t unk2C; // 2C
+ TESQuest* quest; // 30
+ TESTopic* startingTopic; // 38
+ std::int32_t type; // 40 - REX::TEnumSet
+ std::uint8_t unk44[0x4]; // 44
+ std::uint32_t unk48; // 48
+ std::uint32_t unk4C; // 4C
+ BSTArray unk50; // 50 - element type not identified yet
+ };
+ static_assert(sizeof(BGSDialogueBranch) == 0x68);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSDialogueView.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSDialogueView.h
new file mode 100644
index 00000000..e61869a8
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSDialogueView.h
@@ -0,0 +1,46 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x98, vtable RVA 0x3032230, 126 virtual functions
+ class BGSDialogueView :
+ public TESFormIDListView // 000
+ {
+ public:
+ virtual ~BGSDialogueView() = default;
+
+ public:
+ BSTArray unk28; // 28 - element type not identified yet
+ BSTArray unk40; // 40 - element type not identified yet
+ std::uint32_t unk58; // 58
+ std::uint32_t unk5C; // 5C
+ std::uint64_t unk60; // 60
+ std::uint64_t unk68; // 68
+ std::uint32_t unk70; // 70
+ std::uint32_t unk74; // 74
+ std::uint16_t unk78; // 78
+ std::uint8_t unk7A[0x6]; // 7A
+ std::uint64_t unk80; // 80
+ std::uint64_t unk88; // 88
+ std::uint64_t unk90; // 90
+ };
+ static_assert(sizeof(BGSDialogueView) == 0x98);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSDualCastData.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSDualCastData.h
new file mode 100644
index 00000000..eac98c04
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSDualCastData.h
@@ -0,0 +1,49 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSArtObject;
+ class BGSExplosion;
+ class BGSImpactDataSet;
+ class BGSProjectile;
+ class TESEffectShader;
+
+ struct BGSDualCastDataDEF
+ {
+ BGSProjectile* projectile; // 00
+ BGSExplosion* explosion; // 08
+ TESEffectShader* effectShader; // 10
+ BGSArtObject* hitEffectArt; // 18
+ BGSImpactDataSet* impactDataSet; // 20
+ std::uint32_t flags; // 28
+ };
+ static_assert(sizeof(BGSDualCastDataDEF) == 0x30);
+
+ // 1.11.240.0: size 0xC0, vtable RVA 0x30BD660, 154 virtual functions
+ class BGSDualCastData :
+ public TESBoundObject // 000
+ {
+ public:
+ virtual ~BGSDualCastData() = default;
+
+ public:
+ BGSDualCastDataDEF data; // 90
+ };
+ static_assert(sizeof(BGSDualCastData) == 0xC0);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSEncounterZone.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSEncounterZone.h
new file mode 100644
index 00000000..1c05a4cb
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSEncounterZone.h
@@ -0,0 +1,47 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSLocation;
+ class TESForm;
+
+ struct ENCOUNTER_ZONE_DATA
+ {
+ TESForm* zoneOwner; // 00
+ BGSLocation* location; // 08
+ std::int8_t ownerRank; // 10
+ std::int8_t minLevel; // 11
+ std::uint8_t flags; // 12 - REX::TEnumSet
+ std::int8_t maxLevel; // 13
+ };
+ static_assert(sizeof(ENCOUNTER_ZONE_DATA) == 0x18);
+
+ // 1.11.240.0: size 0x48, vtable RVA 0x30A2A98, 124 virtual functions
+ class BGSEncounterZone :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSEncounterZone() = default;
+
+ public:
+ ENCOUNTER_ZONE_DATA data; // 28
+ std::uint64_t unk40; // 40
+ };
+ static_assert(sizeof(BGSEncounterZone) == 0x48);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSEquipSlot.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSEquipSlot.h
new file mode 100644
index 00000000..89805a9a
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSEquipSlot.h
@@ -0,0 +1,39 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class ActorValueInfo;
+
+ // 1.11.240.0: size 0x50, vtable RVA 0x3035D48, 124 virtual functions
+ class BGSEquipSlot :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSEquipSlot() = default;
+
+ public:
+ BSTArray parentSlots; // 28 - BSTArray
+ std::uint32_t flags; // 40
+ std::uint32_t unk44; // 44
+ ActorValueInfo* conditionActorValue; // 48
+ };
+ static_assert(sizeof(BGSEquipSlot) == 0x50);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSEquipType.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSEquipType.h
new file mode 100644
index 00000000..0e3db438
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSEquipType.h
@@ -0,0 +1,37 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSEquipSlot;
+ }
+
+ // 1.11.240.0: size 0x10, vtable RVA 0x3019480, 23 virtual functions
+ class BGSEquipType :
+ public BaseFormComponent // 000
+ {
+ public:
+ virtual ~BGSEquipType() = default;
+
+ virtual Forms::BGSEquipSlot* GetEquipSlot(const void* pInstanceData) const noexcept(true) { return nullptr; } // 21 - RVA 0x893670, return (const char *)*((_QWORD *)this + 1);
+ virtual void SetEquipSlot(Forms::BGSEquipSlot* pSlot) noexcept(true) { return; } // 22 - RVA 0x893680, *(_QWORD *)(a1 + 8) = a2;
+
+ public:
+ Forms::BGSEquipSlot* equipSlot; // 08
+ };
+ static_assert(sizeof(BGSEquipType) == 0x10);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSExplosion.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSExplosion.h
new file mode 100644
index 00000000..0dce4165
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSExplosion.h
@@ -0,0 +1,73 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSImpactDataSet;
+ class BGSProjectile;
+ class BGSSoundDescriptorForm;
+ class TESBoundObject;
+ class TESObjectLIGH;
+
+ struct BGSExplosionData
+ {
+ TESObjectLIGH* light; // 00
+ BGSSoundDescriptorForm* sound1; // 08
+ BGSSoundDescriptorForm* sound2; // 10
+ BGSImpactDataSet* impactDataSet; // 18
+ TESBoundObject* impactPlacedObject; // 20
+ BGSProjectile* spawnProjectile; // 28
+ NiAPI::NiPoint3 projectileVector; // 30
+ float projectileSpread; // 3C
+ std::uint32_t projectileCount; // 40
+ float force; // 44
+ float damage; // 48
+ float innerRadius; // 4C
+ float outerRadius; // 50
+ float imageSpaceRadius; // 54
+ float verticalOffsetMult; // 58
+ std::uint32_t flags; // 5C
+ std::int32_t soundLevel; // 60 - REX::TEnumSet
+ float placedObjectFadeDelay; // 64
+ std::int32_t staggerMagnitude; // 68 - REX::TEnumSet
+ };
+ static_assert(sizeof(BGSExplosionData) == 0x70);
+
+ // 1.11.240.0: size 0x180, vtable RVA 0x3080520, 154 virtual functions
+ class BGSExplosion :
+ public TESBoundObject, // 000
+ public TESFullName, // 090
+ public TESModel, // 0A8
+ public TESEnchantableForm, // 0E0
+ public BGSPreloadable, // 0F8
+ public TESImageSpaceModifiableForm // 100
+ {
+ public:
+ virtual ~BGSExplosion() = default;
+
+ public:
+ BGSExplosionData data; // 110
+ };
+ static_assert(sizeof(BGSExplosion) == 0x180);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSFeaturedItemMessage.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSFeaturedItemMessage.h
new file mode 100644
index 00000000..9f870639
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSFeaturedItemMessage.h
@@ -0,0 +1,34 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSMessage;
+ }
+
+ // 1.11.240.0: size 0x10, vtable RVA 0x2FA6D20, 21 virtual functions
+ class BGSFeaturedItemMessage :
+ public BaseFormComponent // 000
+ {
+ public:
+ virtual ~BGSFeaturedItemMessage() = default;
+
+ public:
+ Forms::BGSMessage* featuredItemMessage; // 08
+ };
+ static_assert(sizeof(BGSFeaturedItemMessage) == 0x10);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSFootstep.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSFootstep.h
new file mode 100644
index 00000000..0684034d
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSFootstep.h
@@ -0,0 +1,36 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSImpactDataSet;
+
+ // 1.11.240.0: size 0x38, vtable RVA 0x305A448, 124 virtual functions
+ class BGSFootstep :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSFootstep() = default;
+
+ public:
+ BSFixedString tagString; // 28
+ BGSImpactDataSet* impactSet; // 30
+ };
+ static_assert(sizeof(BGSFootstep) == 0x38);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSFootstepSet.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSFootstepSet.h
new file mode 100644
index 00000000..9cba5aa2
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSFootstepSet.h
@@ -0,0 +1,32 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0xA8, vtable RVA 0x305AAD8, 124 virtual functions
+ class BGSFootstepSet :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSFootstepSet() = default;
+
+ public:
+ std::uint8_t unk28[0x80]; // 28
+ };
+ static_assert(sizeof(BGSFootstepSet) == 0xA8);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSForcedLocRefType.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSForcedLocRefType.h
new file mode 100644
index 00000000..d7525c97
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSForcedLocRefType.h
@@ -0,0 +1,34 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSLocationRefType;
+ }
+
+ // 1.11.240.0: size 0x10, vtable RVA 0x2FA6E80, 21 virtual functions
+ class BGSForcedLocRefType :
+ public BaseFormComponent // 000
+ {
+ public:
+ virtual ~BGSForcedLocRefType() = default;
+
+ public:
+ Forms::BGSLocationRefType* forcedType; // 08
+ };
+ static_assert(sizeof(BGSForcedLocRefType) == 0x10);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSGodRays.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSGodRays.h
new file mode 100644
index 00000000..686548c5
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSGodRays.h
@@ -0,0 +1,48 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ struct GodRaysData
+ {
+ NiAPI::NiColor colorAir; // 00
+ NiAPI::NiColor colorBack; // 0C
+ NiAPI::NiColor colorFwd; // 18
+ float intensity; // 24
+ float scatterAir; // 28
+ float scatterBack; // 2C
+ float scatterFwd; // 30
+ float phaseBack; // 34
+ float phaseFwd; // 38
+ };
+ static_assert(sizeof(GodRaysData) == 0x3C);
+
+ // 1.11.240.0: size 0x68, vtable RVA 0x2FC1AB8, 124 virtual functions
+ class BGSGodRays :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSGodRays() = default;
+
+ public:
+ GodRaysData data; // 28
+ std::uint32_t unk64; // 64
+ };
+ static_assert(sizeof(BGSGodRays) == 0x68);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSHazard.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSHazard.h
new file mode 100644
index 00000000..99e80ded
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSHazard.h
@@ -0,0 +1,63 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSImpactDataSet;
+ class BGSSoundDescriptorForm;
+ class SpellItem;
+ class TESObjectLIGH;
+
+ struct BGSHazardData
+ {
+ std::uint32_t limit; // 00
+ float radius; // 04
+ float lifetime; // 08
+ float imageSpaceRadius; // 0C
+ float targetInterval; // 10
+ std::uint32_t flags; // 14 - REX::TEnumSet
+ SpellItem* spell; // 18
+ TESObjectLIGH* light; // 20
+ BGSImpactDataSet* impactDataSet; // 28
+ BGSSoundDescriptorForm* sound; // 30
+ float fullEffectRadius; // 38
+ float taperWeight; // 3C
+ float taperCurve; // 40
+ };
+ static_assert(sizeof(BGSHazardData) == 0x48);
+
+ // 1.11.240.0: size 0x140, vtable RVA 0x30812C0, 154 virtual functions
+ class BGSHazard :
+ public TESBoundObject, // 000
+ public TESFullName, // 090
+ public TESModel, // 0A8
+ public BGSPreloadable, // 0E0
+ public TESImageSpaceModifiableForm // 0E8
+ {
+ public:
+ virtual ~BGSHazard() = default;
+
+ public:
+ BGSHazardData data; // F8
+ };
+ static_assert(sizeof(BGSHazard) == 0x140);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSHeadPart.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSHeadPart.h
new file mode 100644
index 00000000..8317f73d
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSHeadPart.h
@@ -0,0 +1,55 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSTextureSet;
+
+ class BGSColorForm;
+
+ class BGSListForm;
+
+ // 1.11.240.0: size 0x1C0, vtable RVA 0x3036560, 124 virtual functions
+ class BGSHeadPart :
+ public TESForm, // 000
+ public TESFullName, // 028
+ public BGSModelMaterialSwap // 040
+ {
+ public:
+ virtual ~BGSHeadPart() = default;
+
+ public:
+ std::uint8_t flags; // 90 - REX::TEnumSet
+ std::uint8_t unk91[0x3]; // 91
+ std::int32_t type; // 94 - REX::TEnumSet
+ BSTArray extraParts; // 98 - BSTArray
+ BGSTextureSet* textureSet; // B0
+ TESModel ChargenModel; // B8
+ TESModelTri morphs[3]; // F0
+ BGSColorForm* colorForm; // 198
+ BGSListForm* validRaces; // 1A0
+ std::uint8_t unk1A8[0x18]; // 1A8
+ };
+ static_assert(sizeof(BGSHeadPart) == 0x1C0);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSIdleCollection.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSIdleCollection.h
new file mode 100644
index 00000000..9c8b7ea4
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSIdleCollection.h
@@ -0,0 +1,39 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class TESIdleForm;
+ }
+
+ // 1.11.240.0: size 0x20, vtable RVA 0x30196C0, 21 virtual functions
+ class BGSIdleCollection :
+ public BaseFormComponent // 000
+ {
+ public:
+ virtual ~BGSIdleCollection() = default;
+
+ public:
+ std::int8_t idleFlags; // 08
+ std::int8_t idleCount; // 09
+ std::uint8_t unk0A[0x6]; // 0A
+ Forms::TESIdleForm** idleArray; // 10
+ float timerCheckForIdle; // 18
+ std::uint32_t unk1C; // 1C
+ };
+ static_assert(sizeof(BGSIdleCollection) == 0x20);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSIdleMarker.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSIdleMarker.h
new file mode 100644
index 00000000..7f778849
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSIdleMarker.h
@@ -0,0 +1,41 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSKeyword;
+
+ // 1.11.240.0: size 0x118, vtable RVA 0x3037160, 154 virtual functions
+ class BGSIdleMarker :
+ public TESBoundObject, // 000
+ public BGSKeywordForm, // 090
+ public TESModel, // 0B0
+ public BGSIdleCollection // 0E8
+ {
+ public:
+ virtual ~BGSIdleMarker() = default;
+
+ public:
+ BGSKeyword* animArchType; // 108
+ BGSKeyword* flavorAnim; // 110
+ };
+ static_assert(sizeof(BGSIdleMarker) == 0x118);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSImpactData.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSImpactData.h
new file mode 100644
index 00000000..52d68920
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSImpactData.h
@@ -0,0 +1,80 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSTextureSet;
+ class BGSSoundDescriptorForm;
+ class BGSExplosion;
+ class BGSHazard;
+
+ struct IMPACT_DATA_DATA
+ {
+ float effectDuration; // 00
+ std::int32_t orient; // 04 - REX::TEnumSet
+ float angleThreshold; // 08
+ float placementRadius; // 0C
+ std::int32_t soundLevel; // 10 - REX::TEnumSet
+ std::int8_t flags; // 14
+ std::int8_t resultOverride; // 15
+ };
+ static_assert(sizeof(IMPACT_DATA_DATA) == 0x18);
+
+ struct DECAL_DATA_DATA
+ {
+ 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);
+
+ struct DecalData
+ {
+ DECAL_DATA_DATA data; // 00
+ };
+ static_assert(sizeof(DecalData) == 0x24);
+
+ // 1.11.240.0: size 0xD0, vtable RVA 0x305B1D8, 124 virtual functions
+ class BGSImpactData :
+ public TESForm, // 000
+ public TESModel // 028
+ {
+ public:
+ virtual ~BGSImpactData() = default;
+
+ public:
+ IMPACT_DATA_DATA data; // 60
+ BGSTextureSet* decalTextureSet; // 78
+ BGSTextureSet* decalTextureSet2; // 80
+ BGSSoundDescriptorForm* sound1; // 88
+ BGSSoundDescriptorForm* sound2; // 90
+ BGSExplosion* explosion; // 98
+ BGSHazard* hazard; // A0
+ DecalData decalData; // A8
+ float maxFootstepParticleDist; // CC
+ };
+ static_assert(sizeof(BGSImpactData) == 0xD0);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSImpactDataSet.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSImpactDataSet.h
new file mode 100644
index 00000000..ef349ad3
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSImpactDataSet.h
@@ -0,0 +1,40 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x68, vtable RVA 0x305BB50, 124 virtual functions
+ class BGSImpactDataSet :
+ public TESForm, // 000
+ public BGSPreloadable // 028
+ {
+ public:
+ virtual ~BGSImpactDataSet() = default;
+
+ public:
+ std::uint8_t unk30[0xC]; // 30
+ std::uint8_t unk3C[0x8]; // 3C
+ std::uint32_t unk44; // 44
+ std::uint64_t unk48; // 48
+ std::uint32_t unk50; // 50
+ std::uint8_t unk54[0xC]; // 54
+ std::uint64_t unk60; // 60
+ };
+ static_assert(sizeof(BGSImpactDataSet) == 0x68);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSInstanceNamingRules.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSInstanceNamingRules.h
new file mode 100644
index 00000000..95d8f1fc
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSInstanceNamingRules.h
@@ -0,0 +1,35 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ // 1.11.240.0: size 0x128, vtable RVA 0x2FB9E60, 124 virtual functions
+ class BGSInstanceNamingRules :
+ public TESForm // 000
+ {
+ public:
+ virtual ~BGSInstanceNamingRules() = default;
+
+ public:
+ std::uint32_t unk28; // 28
+ std::uint8_t unk2C[0xF4]; // 2C
+ std::uint32_t unk120; // 120
+ std::uint32_t unk124; // 124
+ };
+ static_assert(sizeof(BGSInstanceNamingRules) == 0x128);
+ }
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSInstanceNamingRulesForm.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSInstanceNamingRulesForm.h
new file mode 100644
index 00000000..11e6dfdb
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSInstanceNamingRulesForm.h
@@ -0,0 +1,34 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include
+
+namespace CKPE
+{
+ namespace Fallout4
+ {
+ namespace EditorAPI
+ {
+ namespace Forms
+ {
+ class BGSInstanceNamingRules;
+ }
+
+ // 1.11.240.0: size 0x10, vtable RVA 0x2FA70A0, 21 virtual functions
+ class BGSInstanceNamingRulesForm :
+ public BaseFormComponent // 000
+ {
+ public:
+ virtual ~BGSInstanceNamingRulesForm() = default;
+
+ public:
+ Forms::BGSInstanceNamingRules* instanceNamingRules; // 08
+ };
+ static_assert(sizeof(BGSInstanceNamingRulesForm) == 0x10);
+ }
+ }
+}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSKeyword.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSKeyword.h
index bb900c3c..34585ea7 100644
--- a/CKPE.Fallout4/Include/EditorAPI/B/BGSKeyword.h
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSKeyword.h
@@ -1,11 +1,13 @@
-// Copyright © 2025 aka CKPE team. All rights reserved.
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
// Contacts:
// License: https://www.gnu.org/licenses/lgpl-3.0.html
#pragma once
-#include
+#include
#include
+#include
+#include
#include
namespace CKPE
@@ -42,28 +44,32 @@ namespace CKPE
kDispelEffect,
kTotal
};
- private:
- BGSLocalizedString _DisplayName; // 08
- NiAPI::NiRGB _Color; // 10
- BSFixedString _Description; // 18
- std::uint8_t _Type;
- char _unk[15];
- public:
- virtual ~BGS_KEYWORD_DATA() = default;
-
- [[nodiscard]] inline const char* GetDisplayName() const noexcept(true) { return _DisplayName.c_str(); }
- [[nodiscard]] inline NiAPI::NiRGB GetColor() const noexcept(true) { return _Color; }
- [[nodiscard]] inline const char* GetDescription() const noexcept(true) { return _Description.c_str(); }
- [[nodiscard]] inline std::uint8_t GetType() const noexcept(true) { return _Type; }
};
- static_assert(sizeof(BGS_KEYWORD_DATA) == 0x38);
- class BGSKeyword : public TESForm, public BGS_KEYWORD_DATA
+
+ // 1.11.240.0: size 0x60, vtable RVA 0x3037CF8, 124 virtual functions
+ class BGSKeyword :
+ public TESForm, // 000
+ public TESFullName // 028
{
public:
+ virtual ~BGSKeyword() = default;
+
constexpr static std::uint8_t TYPE_ID = ftKeyword;
- virtual ~BGSKeyword() = default;
+ [[nodiscard]] inline const char* GetDisplayName() const noexcept(true) { return GetFullName(); }
+ [[nodiscard]] inline NiAPI::NiRGB GetColor() const noexcept(true) { return color; }
+ [[nodiscard]] inline const char* GetDescription() const noexcept(true) { return description.c_str(); }
+ [[nodiscard]] inline std::uint8_t GetType() const noexcept(true) { return (std::uint8_t)type; }
+
+ public:
+ NiAPI::NiRGB color; // 40
+ std::uint8_t pad43[1]; // 43
+ std::uint32_t unk44; // 44
+ BSFixedString description; // 48
+ std::uint32_t type; // 50
+ std::uint32_t unk54; // 54
+ std::uint64_t unk58; // 58
};
static_assert(sizeof(BGSKeyword) == 0x60);
}
diff --git a/CKPE.Fallout4/Include/EditorAPI/B/BGSKeywordForm.h b/CKPE.Fallout4/Include/EditorAPI/B/BGSKeywordForm.h
new file mode 100644
index 00000000..569c08a8
--- /dev/null
+++ b/CKPE.Fallout4/Include/EditorAPI/B/BGSKeywordForm.h
@@ -0,0 +1,45 @@
+// Copyright © 2020-2025 aka CKPE team. All rights reserved.
+// Contacts:
+// License: https://www.gnu.org/licenses/lgpl-3.0.html
+
+#pragma once
+
+#include
+#include