CommonLibVR
Loading...
Searching...
No Matches
TESForm.h
Go to the documentation of this file.
1#pragma once
2
3#include "RE/B/BSAtomic.h"
4#include "RE/B/BSCoreTypes.h"
6#include "RE/B/BSTArray.h"
7#include "RE/B/BSTHashMap.h"
9#include "RE/F/FormTypes.h"
10#include "RE/T/TESFile.h"
11
12namespace RE
13{
14 class BGSLoadFormBuffer;
15 class BGSSaveFormBuffer;
16 class TESBoundObject;
17 class TESFile;
18 struct FORM;
19 struct FORM_GROUP;
20
21 class TESFileArray : public BSStaticArray<TESFile*>
22 {
23 public:
24 private:
26 };
27 static_assert(sizeof(TESFileArray) == 0x10);
28
30 {
31 public:
32 // members
34 private:
36 };
37 static_assert(sizeof(TESFileContainer) == 0x8);
38
40 {
41 public:
42 inline static constexpr auto RTTI = RTTI_TESForm;
43 inline static constexpr auto VTABLE = VTABLE_TESForm;
44 inline static constexpr auto FORMTYPE = FormType::None;
45
47 {
48 enum ChangeFlag : std::uint32_t
49 {
51 kFlags = 1 << 0
52 };
53 };
54
56 {
57 enum RecordFlag : std::uint32_t
58 {
59 kDestructible = 1 << 0,
60 kMaster = 1 << 0,
61 kUnlocked = 1 << 0,
62
63 kAltered = 1 << 1,
64 kPlayable = 1 << 2,
65 kInitialized = 1 << 3,
66 kNonOccluder = 1 << 4,
67 kDeleted = 1 << 5,
68
69 kBorderRegion = 1 << 6,
72 kKnown = 1 << 6,
74
75 kFireOff = 1 << 7,
76 kMustUpdate = 1 << 8,
77 kOnLocalMap = 1 << 9,
78 kPersistent = 1 << 10,
79
80 kDisabled = 1 << 11,
82
83 kIgnored = 1 << 12,
84
85 kEmpty = 1 << 13,
87
88 kTemporary = 1 << 14,
90 kRandomAnim = 1 << 16,
91 kDangerous = 1 << 17,
92 kHasCurrents = 1 << 19,
94 kStillLoading = 1 << 21,
95 kFormRetainsID = 1 << 22,
96 kDestroyed = 1 << 23,
97
98 kUnk24 = 1 << 24,
99
100 kNoAIAcquire = 1 << 25,
101 kObstacle = 1 << 25,
102
104 kDisableFade = 1 << 27,
105
108
109 kChildCanUse = 1 << 29
110 };
111 };
112
113 enum class InGameFormFlag
114 {
115 kNone = 0,
116 kWantsDelete = 1 << 0,
117 kForcedPersistent = 1 << 1,
118 kNoFavorAllowed = 1 << 4,
119 kIsSkyObject = 1 << 5,
120 kRefOriginalPersistent = 1 << 6,
122 };
123
124 ~TESForm() override; // 00
125
126 // override (BaseFormComponent)
127 void InitializeDataComponent() override; // 01 - { return; }
128 void ClearDataComponent() override; // 02 - { SetEditorID(""); }
129 void CopyComponent(BaseFormComponent* a_rhs) override; // 03
130
131 // add
132 virtual void InitializeData(); // 04 - { return; }
133 virtual void ClearData(); // 05 - { return; }
134 virtual bool Load(TESFile* a_mod); // 06 - { return true; }
135 virtual bool LoadPartial(TESFile* a_mod); // 07 - { return true; }
136 virtual bool LoadEdit(TESFile* a_mod); // 08 - { return Load(a_mod); }
137 virtual TESForm* CreateDuplicateForm(bool a_createEditorID, void* a_arg2); // 09
138 virtual bool AddChange(std::uint32_t a_changeFlags); // 0A
139 virtual void RemoveChange(std::uint32_t a_changeFlags); // 0B
140 virtual bool FindInFileFast(TESFile* a_mod); // 0C - { return false; }
141 virtual bool CheckSaveGame(BGSSaveFormBuffer* a_buf); // 0D - { return true; }
142 virtual void SaveGame(BGSSaveFormBuffer* a_buf); // 0E
143 virtual void LoadGame(BGSLoadFormBuffer* a_buf); // 0F
144 virtual void InitLoadGame(BGSLoadFormBuffer* a_buf); // 10 - { return; }
145 virtual void FinishLoadGame(BGSLoadFormBuffer* a_buf); // 11 - { return; }
146 virtual void Revert(BGSLoadFormBuffer* a_buf); // 12 - { return; }
147 virtual void InitItemImpl(); // 13 - { return; }
148 [[nodiscard]] virtual TESFile* GetDescriptionOwnerFile() const; // 14 - returns the file that last modified this form
149 [[nodiscard]] virtual FormType GetSavedFormType() const; // 15 - { return formType; }
150 virtual void GetFormDetailedString(char* a_buf, std::uint32_t a_bufLen); // 16 - { return std::sprintf_s(a_buf, a_bufLen, "%s Form '%s' (%08X)", g_formStrings[3 * formID], "", formID); }
151 [[nodiscard]] virtual bool GetKnown() const; // 17 - { return (flags >> 6 ) & 1; }
152 [[nodiscard]] virtual bool GetRandomAnim() const; // 18 - { return (flags >> 16) & 1; }
153 [[nodiscard]] virtual bool GetPlayable() const; // 19 - { return (flags >> 2) & 1; }
154 [[nodiscard]] virtual bool IsHeadingMarker() const; // 1A - { return false; }
155 [[nodiscard]] virtual bool GetDangerous() const; // 1B - { return (flags >> 17) & 1; }
156 [[nodiscard]] virtual bool QHasCurrents() const; // 1C - { return (flags >> 19) & 1; }
157 [[nodiscard]] virtual bool GetObstacle() const; // 1D - { return (flags >> 25) & 1; }
158 [[nodiscard]] virtual bool QIsLODLandObject() const; // 1E - { return false; }
159 [[nodiscard]] virtual bool GetOnLocalMap() const; // 1F - { return (flags >> 9) & 1; }
160 [[nodiscard]] virtual bool GetMustUpdate() const; // 20 - { return (flags >> 8) & 1; }
161 virtual void SetOnLocalMap(bool a_set); // 21 - { if (a_set) flags &= 0xFFFFFDFF; else flags |= 0x200; }
162 [[nodiscard]] virtual bool GetIgnoredBySandbox() const; // 22 - { return false; }
163 virtual void SetDelete(bool a_set); // 23 - { bool result = (flags >> 5) & 1; if (result != a_set) { if (a_set) flags |= 0x20; else flags &= 0xFFFFFFDF; AddChange(1); return result; }
164 virtual void SetAltered(bool a_set); // 24
165 virtual void SaveObjectBound(); // 25 - { return; }
166 virtual void LoadObjectBound(TESFile* a_mod); // 26 - { return; }
167 [[nodiscard]] virtual bool IsBoundObject() const; // 27 - { return false; }
168 [[nodiscard]] virtual bool IsObject() const; // 28 - { return false; }
169 [[nodiscard]] virtual bool IsMagicItem() const; // 29 - { return false; }
170 [[nodiscard]] virtual bool IsWater() const; // 2A - { return false; }
171 virtual TESObjectREFR* AsReference1(); // 2B - { return 0; }
172 [[nodiscard]] virtual const TESObjectREFR* AsReference2() const; // 2C - { return 0; }
173 [[nodiscard]] virtual std::uint32_t GetRefCount() const; // 2D - { return 0; }
174 [[nodiscard]] virtual const char* GetTextForParsedSubTag(const BSFixedString& a_tag) const; // 2E
175 virtual void Copy(TESForm* a_srcForm); // 2F - { return; }
176 virtual bool BelongsInGroup(FORM* a_form, bool a_allowParentGroups, bool a_currentOnly); // 30
177 virtual void CreateGroupData(FORM* a_form, FORM_GROUP* a_group); // 31
178 [[nodiscard]] virtual const char* GetFormEditorID() const; // 32 - { return ""; }
179 virtual bool SetFormEditorID(const char* a_str); // 33 - { return true; }
180 virtual bool IsParentForm(); // 34 - { return false; }
181 virtual bool IsParentFormTree(); // 35 - { return false; }
182 virtual bool IsFormTypeChild(FormType a_type); // 36 - { return false; }
183 virtual bool Activate(TESObjectREFR* a_targetRef, TESObjectREFR* a_activatorRef, std::uint8_t a_arg3, TESBoundObject* a_object, std::int32_t a_targetCount); // 37 - { return false; }
184 virtual void SetFormID(FormID a_id, bool a_updateFile); // 38
185 [[nodiscard]] virtual const char* GetObjectTypeName() const; // 39 - { return ""; }
186 [[nodiscard]] virtual bool QAvailableInGame() const; // 3A - { return true; }
187
188 static void AddCompileIndex(FormID& a_id, TESFile* a_file)
189 {
190 using func_t = decltype(&TESForm::AddCompileIndex);
191 static REL::Relocation<func_t> func{ RELOCATION_ID(14509, 14667) };
192 func(a_id, a_file);
193 }
194
195 [[nodiscard]] static auto GetAllForms()
196 -> std::pair<
198 std::reference_wrapper<BSReadWriteLock>>
199 {
200 static REL::Relocation<BSTHashMap<FormID, TESForm*>**> allForms{ RELOCATION_ID(514351, 400507) };
201 static REL::Relocation<BSReadWriteLock*> allFormsMapLock{ RELOCATION_ID(514360, 400517) };
202 return { *allForms, std::ref(*allFormsMapLock) };
203 }
204
205 [[nodiscard]] static auto GetAllFormsByEditorID()
206 -> std::pair<
208 std::reference_wrapper<BSReadWriteLock>>
209 {
210 static REL::Relocation<BSTHashMap<BSFixedString, TESForm*>**> allFormsByEditorID{ RELOCATION_ID(514352, 400509) };
211 static REL::Relocation<BSReadWriteLock*> allFormsEditorIDMapLock{ RELOCATION_ID(514361, 400518) };
212 return { *allFormsByEditorID, std::ref(*allFormsEditorIDMapLock) };
213 }
214
215 [[nodiscard]] static TESForm* LookupByID(FormID a_formID)
216 {
217 const auto& [map, lock] = GetAllForms();
218 [[maybe_unused]] const BSReadWriteLock l{ lock };
219 if (map) {
220 const auto it = map->find(a_formID);
221 return it != map->end() ? it->second : nullptr;
222 } else {
223 return nullptr;
224 }
225 }
226
227 template <class T>
228 [[nodiscard]] static T* LookupByID(FormID a_formID)
229 {
230 const auto form = LookupByID(a_formID);
231 return form ? form->As<T>() : nullptr;
232 }
233
234 [[nodiscard]] static TESForm* LookupByEditorID(const std::string_view& a_editorID)
235 {
236 const auto& [map, lock] = GetAllFormsByEditorID();
237 [[maybe_unused]] const BSReadWriteLock l{ lock };
238 if (map) {
239 const auto it = map->find(a_editorID);
240 return it != map->end() ? it->second : nullptr;
241 } else {
242 return nullptr;
243 }
244 }
245
246 template <class T>
247 [[nodiscard]] static T* LookupByEditorID(const std::string_view& a_editorID)
248 {
249 const auto form = LookupByEditorID(a_editorID);
250 return form ? form->As<T>() : nullptr;
251 }
252
253 template <
254 class T,
255 class = std::enable_if_t<
256 std::negation_v<
257 std::disjunction<
258 std::is_pointer<T>,
259 std::is_reference<T>,
260 std::is_const<T>,
261 std::is_volatile<T>>>>>
262 [[nodiscard]] T* As() noexcept;
263
264 template <
265 class T,
266 class = std::enable_if_t<
267 std::negation_v<
268 std::disjunction<
269 std::is_pointer<T>,
270 std::is_reference<T>,
271 std::is_const<T>,
272 std::is_volatile<T>>>>>
273 [[nodiscard]] const T* As() const noexcept;
274
275 [[nodiscard]] TESObjectREFR* AsReference() { return AsReference1(); }
276 [[nodiscard]] const TESObjectREFR* AsReference() const { return AsReference2(); }
277
278 [[nodiscard]] TESFile* GetFile(std::int32_t a_idx = -1) const
279 {
280 const auto array = sourceFiles.array;
281 if (!array || array->empty()) {
282 return nullptr;
283 }
284
285 if (a_idx < 0 || static_cast<std::uint32_t>(a_idx) >= array->size()) {
286 return array->back();
287 } else {
288 return (*array)[a_idx];
289 }
290 }
291
292 [[nodiscard]] std::uint32_t GetFormFlags() const noexcept { return formFlags; }
293 [[nodiscard]] FormID GetFormID() const noexcept { return formID; }
294 [[nodiscard]] FormType GetFormType() const noexcept { return *formType; }
295 [[nodiscard]] std::int32_t GetGoldValue() const;
296
297 [[nodiscard]] FormID GetLocalFormID()
298 {
299 auto file = GetFile(0);
300
301 RE::FormID fileIndex = file->compileIndex << (3 * 8);
302 fileIndex += file->smallFileCompileIndex << ((1 * 8) + 4);
303
304 return formID & ~fileIndex;
305 }
306
307 [[nodiscard]] const char* GetName() const;
308 [[nodiscard]] float GetWeight() const;
309 [[nodiscard]] bool HasKeywordInArray(const std::vector<BGSKeyword*>& a_keywords, bool a_matchAll) const;
310 [[nodiscard]] bool HasAnyKeywordByEditorID(const std::vector<std::string>& editorIDs) const;
311 [[nodiscard]] bool HasKeywordByEditorID(std::string_view a_editorID);
312 [[nodiscard]] bool HasKeywordInList(BGSListForm* a_keywordList, bool a_matchAll) const;
313 [[nodiscard]] bool HasVMAD() const;
314 [[nodiscard]] bool HasWorldModel() const noexcept;
315 void InitItem() { InitItemImpl(); }
316
317 [[nodiscard]] bool Is(FormType a_type) const noexcept { return GetFormType() == a_type; }
318
319 template <class... Args>
320 [[nodiscard]] bool Is(Args... a_args) const noexcept //
321 requires(std::same_as<Args, FormType>&&...)
322 {
323 return (Is(a_args) || ...);
324 }
325
326 [[nodiscard]] bool IsAmmo() const noexcept { return Is(FormType::Ammo); }
327 [[nodiscard]] bool IsArmor() const noexcept { return Is(FormType::Armor); }
328 [[nodiscard]] bool IsBook() const noexcept { return Is(FormType::Book); }
329 [[nodiscard]] bool IsDeleted() const noexcept { return (GetFormFlags() & RecordFlags::kDeleted) != 0; }
330 [[nodiscard]] bool IsDynamicForm() const noexcept { return GetFormID() >= 0xFF000000; }
331 [[nodiscard]] bool IsGold() const noexcept { return GetFormID() == 0x0000000F; }
332 [[nodiscard]] bool IsIgnored() const noexcept { return (GetFormFlags() & RecordFlags::kIgnored) != 0; }
333 [[nodiscard]] bool IsInventoryObject() const;
334 [[nodiscard]] bool IsInitialized() const noexcept { return (GetFormFlags() & RecordFlags::kInitialized) != 0; }
335 [[nodiscard]] bool IsKey() const noexcept { return Is(FormType::KeyMaster); }
336 [[nodiscard]] bool IsLockpick() const noexcept { return GetFormID() == 0x0000000A; }
337 [[nodiscard]] bool IsNot(FormType a_type) const noexcept { return !Is(a_type); }
338
339 template <class... Args>
340 [[nodiscard]] bool IsNot(Args... a_args) const noexcept //
341 requires(std::same_as<Args, FormType>&&...)
342 {
343 return (IsNot(a_args) && ...);
344 }
345
346 [[nodiscard]] bool IsNote() const noexcept { return Is(FormType::Note); }
347 [[nodiscard]] bool IsPlayer() const noexcept { return GetFormID() == 0x00000007; }
348 [[nodiscard]] bool IsPlayerRef() const noexcept { return GetFormID() == 0x00000014; }
349 [[nodiscard]] bool IsSkooma() const noexcept { return (GetFormID() == 0x00057A7A || GetFormID() == 0x0201391D); }
350 [[nodiscard]] bool IsSoulGem() const noexcept { return Is(FormType::SoulGem); }
351 [[nodiscard]] bool IsWeapon() const noexcept { return Is(FormType::Weapon); }
352
353 void SetPlayerKnows(bool a_known);
354
355 // members
357 std::uint32_t formFlags; // 10
361 std::uint8_t pad1B; // 1B
362 std::uint32_t pad1C; // 1C
363 private:
365 };
366 static_assert(sizeof(TESForm) == 0x20);
367}
#define KEEP_FOR_RE()
Definition PCH.h:517
#define RELOCATION_ID(SE, AE)
Definition PCH.h:506
Definition Relocation.h:210
Definition EnumSet.h:9
Definition BGSListForm.h:11
Definition BGSLoadFormBuffer.h:11
Definition BGSSaveFormBuffer.h:8
Definition BSAtomic.h:112
Definition BSTArray.h:657
constexpr reference back() noexcept
Definition BSTArray.h:683
Definition BSTHashMap.h:21
Definition BaseFormComponent.h:8
Definition TESBoundObject.h:26
Definition TESForm.h:22
Definition TESForm.h:30
TESFileArray * array
Definition TESForm.h:33
Definition TESFile.h:17
Definition TESForm.h:40
REX::EnumSet< FormType, std::uint8_t > formType
Definition TESForm.h:360
bool IsLockpick() const noexcept
Definition TESForm.h:336
virtual void InitItemImpl()
bool HasKeywordByEditorID(std::string_view a_editorID)
static TESForm * LookupByEditorID(const std::string_view &a_editorID)
Definition TESForm.h:234
virtual void SaveGame(BGSSaveFormBuffer *a_buf)
virtual bool LoadEdit(TESFile *a_mod)
virtual bool IsFormTypeChild(FormType a_type)
virtual void LoadGame(BGSLoadFormBuffer *a_buf)
virtual bool IsBoundObject() const
virtual void SetAltered(bool a_set)
virtual bool QAvailableInGame() const
virtual void SetFormID(FormID a_id, bool a_updateFile)
void SetPlayerKnows(bool a_known)
static void AddCompileIndex(FormID &a_id, TESFile *a_file)
Definition TESForm.h:188
void CopyComponent(BaseFormComponent *a_rhs) override
virtual bool QHasCurrents() const
virtual void InitializeData()
virtual bool GetIgnoredBySandbox() const
virtual bool GetMustUpdate() const
virtual bool GetDangerous() const
virtual bool SetFormEditorID(const char *a_str)
bool HasKeywordInArray(const std::vector< BGSKeyword * > &a_keywords, bool a_matchAll) const
bool IsDeleted() const noexcept
Definition TESForm.h:329
InGameFormFlag
Definition TESForm.h:114
std::uint8_t pad1B
Definition TESForm.h:361
FormID GetLocalFormID()
Definition TESForm.h:297
bool IsWeapon() const noexcept
Definition TESForm.h:351
static constexpr auto VTABLE
Definition TESForm.h:43
virtual bool GetPlayable() const
virtual void SetOnLocalMap(bool a_set)
virtual const char * GetFormEditorID() const
virtual bool AddChange(std::uint32_t a_changeFlags)
bool HasWorldModel() const noexcept
virtual TESFile * GetDescriptionOwnerFile() const
virtual void Copy(TESForm *a_srcForm)
virtual void RemoveChange(std::uint32_t a_changeFlags)
virtual bool IsParentFormTree()
static T * LookupByID(FormID a_formID)
Definition TESForm.h:228
bool IsInitialized() const noexcept
Definition TESForm.h:334
virtual void CreateGroupData(FORM *a_form, FORM_GROUP *a_group)
bool IsArmor() const noexcept
Definition TESForm.h:327
virtual void InitLoadGame(BGSLoadFormBuffer *a_buf)
FormType GetFormType() const noexcept
Definition TESForm.h:294
virtual bool IsHeadingMarker() const
virtual bool IsObject() const
virtual void Revert(BGSLoadFormBuffer *a_buf)
virtual void LoadObjectBound(TESFile *a_mod)
virtual bool IsWater() const
bool Is(Args... a_args) const noexcept
Definition TESForm.h:320
static constexpr auto RTTI
Definition TESForm.h:42
bool IsAmmo() const noexcept
Definition TESForm.h:326
virtual void FinishLoadGame(BGSLoadFormBuffer *a_buf)
virtual bool GetRandomAnim() const
virtual TESObjectREFR * AsReference1()
virtual bool Activate(TESObjectREFR *a_targetRef, TESObjectREFR *a_activatorRef, std::uint8_t a_arg3, TESBoundObject *a_object, std::int32_t a_targetCount)
const char * GetName() const
static auto GetAllFormsByEditorID() -> std::pair< BSTHashMap< BSFixedString, TESForm * > *, std::reference_wrapper< BSReadWriteLock > >
Definition TESForm.h:205
virtual bool BelongsInGroup(FORM *a_form, bool a_allowParentGroups, bool a_currentOnly)
bool HasAnyKeywordByEditorID(const std::vector< std::string > &editorIDs) const
virtual void GetFormDetailedString(char *a_buf, std::uint32_t a_bufLen)
virtual bool IsParentForm()
void ClearDataComponent() override
virtual void SetDelete(bool a_set)
virtual bool CheckSaveGame(BGSSaveFormBuffer *a_buf)
bool IsIgnored() const noexcept
Definition TESForm.h:332
FormID formID
Definition TESForm.h:358
virtual std::uint32_t GetRefCount() const
const TESObjectREFR * AsReference() const
Definition TESForm.h:276
bool IsNot(FormType a_type) const noexcept
Definition TESForm.h:337
virtual void ClearData()
FormID GetFormID() const noexcept
Definition TESForm.h:293
std::uint32_t pad1C
Definition TESForm.h:362
static auto GetAllForms() -> std::pair< BSTHashMap< FormID, TESForm * > *, std::reference_wrapper< BSReadWriteLock > >
Definition TESForm.h:195
bool Is(FormType a_type) const noexcept
Definition TESForm.h:317
std::int32_t GetGoldValue() const
bool IsInventoryObject() const
bool IsPlayerRef() const noexcept
Definition TESForm.h:348
virtual bool FindInFileFast(TESFile *a_mod)
float GetWeight() const
bool IsNot(Args... a_args) const noexcept
Definition TESForm.h:340
virtual const char * GetObjectTypeName() const
TESFile * GetFile(std::int32_t a_idx=-1) const
Definition TESForm.h:278
virtual bool GetKnown() const
REX::EnumSet< InGameFormFlag, std::uint16_t > inGameFormFlags
Definition TESForm.h:359
virtual void SaveObjectBound()
bool HasVMAD() const
virtual bool GetObstacle() const
virtual bool IsMagicItem() const
virtual bool Load(TESFile *a_mod)
virtual bool QIsLODLandObject() const
bool HasKeywordInList(BGSListForm *a_keywordList, bool a_matchAll) const
bool IsSkooma() const noexcept
Definition TESForm.h:349
virtual const TESObjectREFR * AsReference2() const
bool IsDynamicForm() const noexcept
Definition TESForm.h:330
TESFileContainer sourceFiles
Definition TESForm.h:356
std::uint32_t GetFormFlags() const noexcept
Definition TESForm.h:292
void InitItem()
Definition TESForm.h:315
std::uint32_t formFlags
Definition TESForm.h:357
static constexpr auto FORMTYPE
Definition TESForm.h:44
bool IsGold() const noexcept
Definition TESForm.h:331
virtual FormType GetSavedFormType() const
void InitializeDataComponent() override
bool IsSoulGem() const noexcept
Definition TESForm.h:350
bool IsNote() const noexcept
Definition TESForm.h:346
static TESForm * LookupByID(FormID a_formID)
Definition TESForm.h:215
T * As() noexcept
Definition FormTraits.h:146
bool IsPlayer() const noexcept
Definition TESForm.h:347
static T * LookupByEditorID(const std::string_view &a_editorID)
Definition TESForm.h:247
TESObjectREFR * AsReference()
Definition TESForm.h:275
bool IsBook() const noexcept
Definition TESForm.h:328
virtual TESForm * CreateDuplicateForm(bool a_createEditorID, void *a_arg2)
virtual const char * GetTextForParsedSubTag(const BSFixedString &a_tag) const
~TESForm() override
virtual bool LoadPartial(TESFile *a_mod)
virtual bool GetOnLocalMap() const
bool IsKey() const noexcept
Definition TESForm.h:335
Definition TESObjectREFR.h:114
Definition AbsorbEffect.h:6
constexpr std::array< REL::ID, 1 > VTABLE_TESForm
Definition Offsets_VTABLE.h:12827
constexpr REL::ID RTTI_TESForm(static_cast< std::uint64_t >(513848))
FormType
Definition FormTypes.h:139
std::uint32_t FormID
Definition BSCoreTypes.h:5
Definition EffectArchetypes.h:65
Definition FORM.h:20
Definition FORM.h:6
Definition TESForm.h:47
ChangeFlag
Definition TESForm.h:49
@ kCreated
Definition TESForm.h:50
@ kFlags
Definition TESForm.h:51
Definition TESForm.h:56
RecordFlag
Definition TESForm.h:58
@ kTemporary
Definition TESForm.h:88
@ kStillLoading
Definition TESForm.h:94
@ kOnLocalMap
Definition TESForm.h:77
@ kMaster
Definition TESForm.h:60
@ kRandomAnim
Definition TESForm.h:90
@ kResetDestruction
Definition TESForm.h:86
@ kUsedAsMovingPlatform
Definition TESForm.h:81
@ kFireOff
Definition TESForm.h:75
@ kDeleted
Definition TESForm.h:67
@ kUnlocked
Definition TESForm.h:61
@ kMustBeVisibleDistant
Definition TESForm.h:89
@ kReflectedByAutoWater
Definition TESForm.h:106
@ kInPlaceableWater
Definition TESForm.h:73
@ kVATSTargetOverride
Definition TESForm.h:103
@ kDisabled
Definition TESForm.h:80
@ kNoAIAcquire
Definition TESForm.h:100
@ kAltered
Definition TESForm.h:63
@ kIgnoreFriendlyHits
Definition TESForm.h:93
@ kDisableFade
Definition TESForm.h:104
@ kFormRetainsID
Definition TESForm.h:95
@ kShowOnWorldMap
Definition TESForm.h:107
@ kInitialized
Definition TESForm.h:65
@ kDangerous
Definition TESForm.h:91
@ kUnk24
Definition TESForm.h:98
@ kEmpty
Definition TESForm.h:85
@ kMustUpdate
Definition TESForm.h:76
@ kDestructible
Definition TESForm.h:59
@ kIgnored
Definition TESForm.h:83
@ kObstacle
Definition TESForm.h:101
@ kChildCanUse
Definition TESForm.h:109
@ kHasCurrents
Definition TESForm.h:92
@ kBorderRegion
Definition TESForm.h:69
@ kGlobalConstant
Definition TESForm.h:70
@ kPlayable
Definition TESForm.h:64
@ kKnown
Definition TESForm.h:72
@ kPersistent
Definition TESForm.h:78
@ kDestroyed
Definition TESForm.h:96
@ kNonOccluder
Definition TESForm.h:66
@ kHasSpokenFlag
Definition TESForm.h:71