CommonLibSSE (powerof3)
Loading...
Searching...
No Matches
TESObjectREFR.h
Go to the documentation of this file.
1#pragma once
2
7#include "RE/B/BSTArray.h"
8#include "RE/B/BSTEvent.h"
9#include "RE/B/BSTList.h"
11#include "RE/B/BipedObjects.h"
12#include "RE/E/ExtraDataList.h"
13#include "RE/F/FormTypes.h"
14#include "RE/H/hkVector4.h"
15#include "RE/H/hkpMotion.h"
17#include "RE/M/MagicSystem.h"
18#include "RE/N/NiPoint3.h"
19#include "RE/N/NiSmartPointer.h"
20#include "RE/N/NiTransform.h"
21#include "RE/T/TESForm.h"
22
23namespace RE
24{
25 enum class LOCK_LEVEL;
26 class hkpCollidable;
27 class Actor;
28 class ActorCause;
29 class BGSAnimationSequencer;
30 class BGSArtObject;
31 class BGSDialogueBranch;
32 class BipedAnim;
33 class BSAnimNoteReceiver;
34 class BSFaceGenAnimationData;
35 class BSFaceGenNiNode;
36 class BSFlattenedBoneTree;
37 class DialogueResponse;
38 class EnchantmentItem;
39 class Explosion;
40 class InventoryChanges;
41 class InventoryEntryData;
42 class MagicCaster;
43 class MagicTarget;
44 class ModelReferenceEffect;
45 class NiAVObject;
46 class NiControllerManager;
47 class NiControllerSequence;
48 class NiNode;
49 class NiObject;
50 class Projectile;
51 class ShaderReferenceEffect;
52 class TargetEntry;
53 class TESActorBase;
54 class TESBoundObject;
55 class TESContainer;
56 class TESEffectShader;
57 class TrapData;
58 class TrapEntry;
59 struct BGSDecalGroup;
60 struct BSAnimationGraphEvent;
61 struct BSAnimationUpdateData;
62 struct REFR_LOCK;
63
73
74 struct OBJ_REFR
75 {
76 public:
77 // members
81 };
82 static_assert(sizeof(OBJ_REFR) == 0x20);
83
85 {
86 public:
87 // members
88 BSTSmallArray<void*> unk00; // 00 - handleList?
91 float cachedRadius; // 24
92 std::uint16_t flags; // 28
93 std::int16_t underwaterCount; // 2A
94 std::uint32_t pad2C; // 2C
95 std::uint64_t unk30; // 30 - AIProcess::Data0B8
96 std::uint64_t unk38; // 38
97 std::uint64_t unk40; // 40
98 std::uint64_t unk48; // 48
99 std::uint64_t unk50; // 50
100 std::uint64_t unk58; // 58
101 std::uint64_t unk60; // 60
103 void* unk70; // 70 - smart ptr
104 };
105 static_assert(sizeof(LOADED_REF_DATA) == 0x78);
106
108
110 public TESForm, // 00
111 public BSHandleRefObject, // 20
112 public BSTEventSink<BSAnimationGraphEvent>, // 30
114 {
115 public:
116 inline static constexpr auto RTTI = RTTI_TESObjectREFR;
117 inline static constexpr auto VTABLE = VTABLE_TESObjectREFR;
118 inline static constexpr auto FORMTYPE = FormType::Reference;
119
120 using Count = std::int32_t;
121 using InventoryCountMap = std::map<TESBoundObject*, Count>;
122 using InventoryItemMap = std::map<TESBoundObject*, std::pair<Count, std::unique_ptr<InventoryEntryData>>>;
123 using InventoryDropMap = std::map<TESBoundObject*, std::pair<Count, std::vector<ObjectRefHandle>>>;
124
125 static inline constexpr auto DEFAULT_INVENTORY_FILTER = [](TESBoundObject&) { return true; };
126
128 {
129 enum ChangeFlag : std::uint32_t
130 {
131 kMoved = 1 << 1,
132 kHavokMoved = 1 << 2,
133 kCellChanged = 1 << 3,
134 kScale = 1 << 4,
135 kInventory = 1 << 5,
137 kBaseObject = 1 << 7,
138 kItemExtraData = 1 << 10,
139 kAmmoExtra = 1 << 11,
140 kLockExtra = 1 << 12,
141 kEmpty = 1 << 21,
143 kOpenState = 1 << 23,
144 kPromoted = 1 << 25,
147 kAnimation = 1 << 28,
148 kEncZoneExtra = 1 << 29,
150 kGameOnlyExtra = (std::uint32_t)1 << 31
151 };
152 };
153
155 {
156 enum RecordFlag : std::uint32_t
157 {
159 kCollisionsDisabled = 1 << 4, // ?
160
161 kDeleted = 1 << 5,
162 kHiddenFromLocalMap = 1 << 6, // TESObjectSTAT
163 kTurnOffFire = 1 << 7,
164
165 kInaccessible = 1 << 8, // TESObjectDOOR
166 kLODRespectsEnableState = 1 << 8, // TESObjectSTAT
167 kStartsDead = 1 << 8, // TESNPC
169
170 kMotionBlur = 1 << 9, // TESObjectSTAT
171 kPersistent = 1 << 10,
173 kIgnored = 1 << 12,
174
175 kStartUnconscious = 1 << 13, // TESNPC
176 kSkyMarker = 1 << 13,
177 kHarvested = 1 << 13, // TESObjectTREE
178
179 kIsFullLOD = 1 << 16, // Actor
180 kNeverFades = 1 << 16, // TESObjectLIGH
181
183
184 kIgnoreFriendlyHits = 1 << 20, // Actor
185
186 kNoAIAcquire = 1 << 25,
190
192
193 kGround = 1 << 30,
194 kRespawns = 1 << 30,
195
196 kMultibound = (std::uint32_t)1 << 31
197 };
198 };
199
200 ~TESObjectREFR() override; // 00
201
202 // override (TESForm)
203 void InitializeData() override; // 04
204 void ClearData() override; // 05
205 bool Load(TESFile* a_mod) override; // 06
206 TESForm* CreateDuplicateForm(bool a_createEditorID, void* a_arg2) override; // 09
207 bool CheckSaveGame(BGSSaveFormBuffer* a_buf) override; // 0D
208 void SaveGame(BGSSaveFormBuffer* a_buf) override; // 0E
209 void LoadGame(BGSLoadFormBuffer* a_buf) override; // 0F
210 void InitLoadGame(BGSLoadFormBuffer* a_buf) override; // 10
211 void FinishLoadGame(BGSLoadFormBuffer* a_buf) override; // 11
212 void Revert(BGSLoadFormBuffer* a_buf) override; // 12
213 void InitItemImpl() override; // 13
214 FormType GetSavedFormType() const override; // 15
215 void GetFormDetailedString(char* a_buf, std::uint32_t a_bufLen) override; // 16
216 bool GetRandomAnim() const override; // 18 - { return data.objectReference->GetRandomAnim(); }
217 bool IsHeadingMarker() const override; // 1A - { return data.objectReference->formType == FormType::Light ? (flags & RecordFlags::kNeverFades) != 0 : false; }
218 bool GetDangerous() const override; // 1B - { return data.objectReference->GetDangerous(); }
219 bool GetObstacle() const override; // 1D - { return data.objectReference ? data.objectReference->GetObstacle() : false; }
220 bool GetOnLocalMap() const override; // 1F - { return (flags >> 9) & 1 && data.objectReference->GetOnLocalMap(); }
221 bool GetMustUpdate() const override; // 20 - { return data.objectReference->GetMustUpdate(); }
222 void SetOnLocalMap(bool a_set) override; // 21
223 bool GetIgnoredBySandbox() const override; // 22
224 void SetDelete(bool a_set) override; // 23
225 void SetAltered(bool a_set) override; // 24
226 bool IsWater() const override; // 2A - { return data.objectReference ? data.objectReference->IsWater() : false; }
227 TESObjectREFR* AsReference1() override; // 2B - { return this; }
228 const TESObjectREFR* AsReference2() const override; // 2C - { return this; }
229 bool BelongsInGroup(FORM* a_form, bool a_allowParentGroups, bool a_currentOnly) override; // 30
230 void CreateGroupData(FORM* a_form, FORM_GROUP* a_group) override; // 31
231 const char* GetFormEditorID() const override; // 32
232
233 // override (BSTEventSink<BSAnimationGraphEvent>)
235
236 // override (IAnimationGraphManagerHolder)
241 bool SetupAnimEventSinks(const BSTSmartPointer<BShkbAnimationGraph>& a_animGraph) override; // 08
243
244 // add
245 virtual void Predestroy(); // 3B
246 virtual BGSLocation* GetEditorLocation1() const; // 3C
247 virtual bool GetEditorLocation2(NiPoint3& a_outPos, NiPoint3& a_outRot, TESForm*& a_outWorldOrCell, TESObjectCELL* a_fallback); // 3D
248 virtual void ForceEditorLocation(BGSLocation* a_location); // 3E
249 virtual void Update3DPosition(bool a_warp); // 3F
250 virtual void UpdateSoundCallBack(bool a_endSceneAction); // 40
251 virtual bool SetDialogueWithPlayer(bool a_flag, bool a_forceGreet, TESTopicInfo* a_topic); // 41
252 virtual void DamageObject(float a_objectHealth, bool a_arg3); // 42
253 virtual bool GetFullLODRef() const; // 43
254 virtual void SetFullLODRef(bool a_set); // 44
255 virtual BGSAnimationSequencer* GetSequencer() const; // 45
256 virtual bool QCanUpdateSync() const; // 46 - { return true; }
257 virtual bool GetAllowPromoteToPersistent() const; // 47 - { return true; }
258 virtual bool HasKeywordHelper(const BGSKeyword* a_keyword) const; // 48
259 virtual TESPackage* CheckForCurrentAliasPackage(); // 49 - { return 0; }
260 virtual BGSScene* GetCurrentScene() const; // 4A
261 virtual void SetCurrentScene(BGSScene* a_scene); // 4B
262 virtual bool UpdateInDialogue(DialogueResponse* a_response, bool a_unused); // 4C
263 virtual BGSDialogueBranch* GetExclusiveBranch() const; // 4D
264 virtual void SetExclusiveBranch(BGSDialogueBranch* a_branch); // 4E
265 virtual void PauseCurrentDialogue(); // 4F
266 virtual void SetActorCause(ActorCause* a_cause); // 50
267 virtual ActorCause* GetActorCause() const; // 51
268 virtual NiPoint3 GetStartingAngle() const; // 52
269 virtual NiPoint3 GetStartingLocation() const; // 53
270 virtual void SetStartingPosition(const NiPoint3& a_pos); // 54
271 virtual void UpdateRefLight(); // 55
272 virtual ObjectRefHandle RemoveItem(TESBoundObject* a_item, std::int32_t a_count, ITEM_REMOVE_REASON a_reason, ExtraDataList* a_extraList, TESObjectREFR* a_moveToRef, const NiPoint3* a_dropLoc = 0, const NiPoint3* a_rotate = 0); // 56
273 virtual bool AddWornItem(TESBoundObject* a_item, std::int32_t a_count, bool a_forceEquip, std::uint32_t a_arg4, std::uint32_t a_arg5); // 57
274 virtual void DoTrap1(TrapData& a_data); // 58 - { return; }
275 virtual void DoTrap2(TrapEntry* a_trap, TargetEntry* a_target); // 59 - { return; }
276 virtual void AddObjectToContainer(TESBoundObject* a_object, ExtraDataList* a_extraList, std::int32_t a_count, TESObjectREFR* a_fromRefr); // 5A
277 virtual NiPoint3 GetLookingAtLocation() const; // 5B
279 virtual MagicTarget* GetMagicTarget(); // 5D
280 virtual bool IsChild() const; // 5E - { return false; }
281 virtual TESActorBase* GetTemplateActorBase(); // 5F - { return 0; }
282 virtual void SetTemplateActorBase(TESActorBase* a_template); // 60 - { return; }
283 virtual BSFaceGenNiNode* GetFaceNodeSkinned(); // 61 - { return 0; }
284 virtual BSFaceGenNiNode* GetFaceNode(); // 62 - { return GetFaceNodeSkinned(); }
285 virtual BSFaceGenAnimationData* GetFaceGenAnimationData(); // 63 - { return 0; }
286 virtual bool ClampToGround(); // 64
287 virtual bool DetachHavok(NiAVObject* a_obj3D); // 65
288 virtual void InitHavok(); // 66
289 virtual void Unk_67(void); // 67 - { return; }
290 virtual void Unk_68(void); // 68 - { return; }
291 virtual void Unk_69(void); // 69 - { return; }
292 virtual NiAVObject* Load3D(bool a_backgroundLoading); // 6A
293 virtual void Release3DRelatedData(); // 6B
294 virtual void Set3D(NiAVObject* a_object, bool a_queue3DTasks = true); // 6C
295 virtual bool ShouldBackgroundClone() const; // 6D
296 virtual void Unk_6E(void); // 6E - { return; }
297 virtual NiAVObject* Get3D1(bool a_firstPerson) const; // 6F - { return Get3D2(); }
298 virtual NiAVObject* Get3D2() const; // 70
299 virtual bool Is3rdPersonVisible() const; // 71 - { return true; }
300 virtual bool PopulateGraphProjectsToLoad(void) const; // 72
301 virtual NiPoint3 GetBoundMin() const; // 73
302 virtual NiPoint3 GetBoundMax() const; // 74
303 virtual void Unk_75(void); // 75 - { return 0; }
304 virtual bool InitNonNPCAnimation(NiNode& a_nodeForAnim); // 76
305 virtual bool CheckAndFixSkinAndBoneOrder(NiNode& a_nodeToTest); // 77
306 virtual void Unk_78(void); // 78
307 virtual void ModifyAnimationUpdateData(BSAnimationUpdateData& a_data); // 79 - { return; }
308 virtual bool ShouldSaveAnimationOnUnloading() const; // 7A
309 virtual bool ShouldSaveAnimationOnSaving() const; // 7B
310 virtual bool ShouldPerformRevert() const; // 7C - { return true; }
311 virtual void UpdateAnimation(float a_delta); // 7D
312 virtual const BSTSmartPointer<BipedAnim>& GetBiped1(bool a_firstPerson) const; // 7E - { return GetBiped2(); }
313 virtual const BSTSmartPointer<BipedAnim>& GetBiped2() const; // 7F
314 virtual const BSTSmartPointer<BipedAnim>& GetCurrentBiped() const; // 80 - { return GetBiped2(); }
315 virtual void SetBiped(const BSTSmartPointer<BipedAnim>& a_biped); // 81 - { return; }
316 virtual void RemoveWeapon(BIPED_OBJECT equipIndex); // 82 - { return; }
317 virtual void Unk_83(void); // 83 - { return; }
318 virtual void SetObjectReference(TESBoundObject* a_object); // 84 - sets flag 24 if the object has destructibles
319 virtual void MoveHavok(bool a_forceRec); // 85
320 virtual void GetLinearVelocity(NiPoint3& a_velocity) const; // 86
321 virtual void SetActionComplete(bool a_set); // 87 - { return; }
322 virtual void SetMovementComplete(bool a_set); // 88 - { return; }
323 virtual void Disable(); // 89
324 virtual void ResetInventory(bool a_leveledOnly); // 8A
325 virtual NiNode* GetFireNode(); // 8B - { return 0; }
326 virtual void SetFireNode(NiNode* a_fireNode); // 8C - { return; }
327 virtual NiAVObject* GetCurrent3D() const; // 8D - { return Get3D2(); }
328 virtual Explosion* AsExplosion(); // 8E - { return 0; }
329 virtual Projectile* AsProjectile(); // 8F - { return 0; }
330 virtual bool OnAddCellPerformQueueReference(TESObjectCELL& a_cell) const; // 90 - { return true; }
331 virtual void DoMoveToHigh(); // 91 - { return; }
332 virtual void TryMoveToMiddleLow(); // 92 - { return; }
333 virtual bool TryChangeSkyCellActorsProcessLevel(); // 93 - { return false; }
334 virtual void Unk_94(void); // 94 - { return; }
335 virtual void TryUpdateActorLastSeenTime(); // 95 - { return; }
336 virtual void Unk_96(void); // 96 - related to lockpicking
337 virtual TESObjectCELL* GetSaveParentCell() const; // 97
338 virtual void SetParentCell(TESObjectCELL* a_cell); // 98
339 virtual bool IsDead(bool a_notEssential = true) const; // 99
340 virtual BSAnimNoteReceiver* CreateAnimNoteReceiver(); // 9A
341 virtual BSAnimNoteReceiver* GetAnimNoteReceiver(); // 9B
342 virtual bool ProcessInWater(hkpCollidable* a_collidable, float a_waterHeight, float a_deltaTime); // 9C
343 virtual bool ApplyCurrent(float a_velocityTime, const hkVector4& a_velocity); // 9D - { return 0; }
344 virtual TESAmmo* GetCurrentAmmo() const; // 9E - { return 0; }
345 virtual BGSDecalGroup* GetDecalGroup() const; // 9F
346 virtual bool Unk_A0(NiAVObject* a_node, float& a_angleX, float& a_angleZ, NiPoint3& a_pos) const; // A0
347 virtual void UnequipItem(std::uint64_t a_arg1, TESBoundObject* a_object); // A1 - { return; }
348
349 static ObjectRefHandle CreateReference(ObjectRefHandle& a_handleOut, FormType a_formType, bool a_addActorToProcessList);
351 static bool LookupByHandle(RefHandle a_refHandle, NiPointer<TESObjectREFR>& a_refrOut);
353
354 bool ActivateRef(TESObjectREFR* a_activator, std::uint8_t a_arg2, TESBoundObject* a_object, std::int32_t a_count, bool a_defaultProcessingOnly);
355 ModelReferenceEffect* ApplyArtObject(BGSArtObject* a_artObject, float a_duration = -1.0f, TESObjectREFR* a_facingRef = nullptr, bool a_faceTarget = false, bool a_attachToCamera = false, NiAVObject* a_attachNode = nullptr, bool a_interfaceEffect = false);
356 ShaderReferenceEffect* ApplyEffectShader(TESEffectShader* a_effectShader, float a_duration = -1.0f, TESObjectREFR* a_facingRef = nullptr, bool a_faceTarget = false, bool a_attachToCamera = false, NiAVObject* a_attachNode = nullptr, bool a_interfaceEffect = false);
359 void DoTrap(TrapData& a_data);
360 void DoTrap(TrapEntry* a_trap, TargetEntry* a_target);
361 void Enable(bool a_resetInventory);
363 NiAVObject* Get3D(bool a_firstPerson) const;
366 float GetAngleX() const;
367 float GetAngleY() const;
368 float GetAngleZ() const;
369 float GetBaseHeight() const;
373 const BSTSmartPointer<BipedAnim>& GetBiped(bool a_firstPerson) const;
374 std::uint16_t GetCalcLevel(bool a_adjustLevel) const;
377 const char* GetDisplayFullName();
378 float GetDistance(TESObjectREFR* a_other, bool a_disabledRefs = false, bool a_ignoreWorldspace = false) const;
380 InventoryDropMap GetDroppedInventory(std::function<bool(TESBoundObject&)> a_filter);
383 bool GetEditorLocation(NiPoint3& a_outPos, NiPoint3& a_outRot, TESForm*& a_outWorldOrCell, TESObjectCELL* a_fallback);
385 std::optional<double> GetEnchantmentCharge() const;
388 float GetHeadingAngle(const RE::NiPoint3& a_pos, bool a_abs);
389 float GetHeight() const;
391 InventoryItemMap GetInventory(std::function<bool(TESBoundObject&)> a_filter, bool a_noInit = false);
392 std::int32_t GetInventoryCount(bool no_init = false);
394 InventoryCountMap GetInventoryCounts(std::function<bool(TESBoundObject&)> a_filter, bool a_noInit = false);
395 InventoryChanges* GetInventoryChanges(bool a_noInit = false);
399 const char* GetName() const;
401 [[nodiscard]] constexpr TESBoundObject* GetObjectReference() const noexcept { return data.objectReference; }
403 [[nodiscard]] constexpr TESObjectCELL* GetParentCell() const noexcept { return parentCell; }
404 [[nodiscard]] constexpr NiPoint3 GetPosition() const noexcept { return data.location; }
405 [[nodiscard]] constexpr float GetPositionX() const noexcept { return data.location.x; }
406 [[nodiscard]] constexpr float GetPositionY() const noexcept { return data.location.y; }
407 [[nodiscard]] constexpr float GetPositionZ() const noexcept { return data.location.z; }
408 [[nodiscard]] float GetScale() const;
410 std::uint32_t GetStealValue(const InventoryEntryData* a_entryData, std::uint32_t a_numItems, bool a_useMult) const;
411 float GetSubmergeLevel(float a_zPos, TESObjectCELL* a_cell) const;
412 void GetTransform(NiTransform& a_transform) const;
413 float GetWaterHeight() const;
414 float GetWeight() const;
417 bool HasCollision() const;
418 bool HasContainer() const;
419 bool HasKeyword(const BGSKeyword* a_keyword) const;
420 bool HasKeywordInArray(const std::vector<BGSKeyword*>& a_keywords, bool a_matchAll) const;
421 bool HasKeywordInList(BGSListForm* a_keywordList, bool a_matchAll) const;
422 bool HasKeywordWithType(DEFAULT_OBJECT keywordType) const;
423 bool HasQuestObject() const;
425 bool InitInventoryIfRequired(bool a_ignoreContainerExtraData = false);
426 bool Is3DLoaded() const;
428 bool IsAnimal() const;
429 bool IsAnOwner(const Actor* a_testOwner, bool a_useFaction, bool a_requiresOwner) const;
431 bool IsDisabled() const;
432 bool IsDragon() const;
433 bool IsEnchanted() const;
434 bool IsHorse() const;
435 bool IsHumanoid() const;
437 bool IsInWater() const;
438 bool IsJewelry() const;
439 bool IsLocked() const;
442 bool IsPersistent() const;
443 bool IsPointSubmergedMoreThan(const NiPoint3& a_pos, TESObjectCELL* a_cell, float a_waterLevel) const;
444 void MoveTo(TESObjectREFR* a_target);
445 bool MoveToNode(TESObjectREFR* a_target, const BSFixedString& a_nodeName);
446 bool MoveToNode(TESObjectREFR* a_target, NiAVObject* a_node);
447 bool NameIncludes(std::string_view a_word) const;
448 void OpenContainer(std::int32_t a_openType) const;
449 NiPointer<TESObjectREFR> PlaceObjectAtMe(TESBoundObject* a_baseToPlace, bool a_forcePersist) const;
452 void SetActivationBlocked(bool a_blocked);
453 void SetCollision(bool a_enable);
454 bool SetDisplayName(const BSFixedString& a_name, bool a_force);
456 bool SetMotionType(hkpMotion::MotionType a_motionType, bool a_allowActivate = true);
457 void SetOwner(TESForm* a_owner);
458 void SetPosition(float a_x, float a_y, float a_z);
461
462 // members
467 std::uint64_t unk88; // 88
468 std::uint16_t refScale; // 90
469 std::int8_t modelState; // 92
470 bool preDestroyed; // 93
471 std::uint32_t pad94; // 94
472
473 private:
474 InventoryChanges* ForceInitInventoryChanges();
475 InventoryChanges* MakeInventoryChanges();
476 void MoveTo_Impl(const ObjectRefHandle& a_targetHandle, TESObjectCELL* a_targetCell, TESWorldSpace* a_selfWorldSpace, const NiPoint3& a_position, const NiPoint3& a_rotation);
477 void PlayAnimation_Impl(NiControllerManager* a_manager, NiControllerSequence* a_toSeq, NiControllerSequence* a_fromSeq, bool a_arg4 = false);
478 };
479#ifndef SKYRIM_SUPPORT_AE
480 static_assert(sizeof(TESObjectREFR) == 0x98);
481#else
482 static_assert(sizeof(TESObjectREFR) == 0xA0);
483#endif
484};
#define NiSmartPointer(className)
Definition NiSmartPointer.h:251
Definition ActorCause.h:9
Definition Actor.h:133
Definition BGSAnimationSequencer.h:11
Definition BGSArtObject.h:12
Definition BGSDialogueBranch.h:10
Definition BGSEncounterZone.h:43
Definition BGSKeyword.h:10
Definition BGSListForm.h:11
Definition BGSLoadFormBuffer.h:11
Definition BGSLocation.h:68
Definition BGSSaveFormBuffer.h:8
Definition BGSScene.h:32
Definition BSFaceGenAnimationData.h:11
Definition BSFaceGenNiNode.h:14
Definition BSHandleRefObject.h:8
Definition BSTArray.h:378
Definition BSTEvent.h:185
Definition BSTEvent.h:19
Definition BSTSmartPointer.h:37
Definition DialogueItem.h:22
Definition EnchantmentItem.h:10
Definition Explosion.h:23
Definition ExtraDataList.h:49
Definition IAnimationGraphManagerHolder.h:18
Definition InventoryChanges.h:15
Definition InventoryEntryData.h:15
Definition MagicCaster.h:25
Definition MagicTarget.h:25
Definition ModelReferenceEffect.h:20
Definition NiAVObject.h:51
Definition NiControllerManager.h:17
Definition NiControllerSequence.h:23
Definition NiNode.h:12
Definition NiPoint3.h:6
float z
Definition NiPoint3.h:52
float x
Definition NiPoint3.h:50
float y
Definition NiPoint3.h:51
Definition NiSmartPointer.h:9
Definition NiTransform.h:9
Definition Projectile.h:30
Definition ShaderReferenceEffect.h:21
Definition TESActorBase.h:32
Definition TESAmmo.h:50
Definition TESBoundObject.h:24
Definition TESContainer.h:33
Definition TESEffectShader.h:182
Definition TESFaction.h:120
Definition TESFile.h:17
Definition TESForm.h:36
Definition TESNPC.h:36
Definition TESObjectCELL.h:115
Definition TESObjectREFR.h:114
const char * GetDisplayFullName()
LOADED_REF_DATA * loadedData
Definition TESObjectREFR.h:465
void ClearData() override
virtual bool GetAllowPromoteToPersistent() const
virtual void InitHavok()
static constexpr auto DEFAULT_INVENTORY_FILTER
Definition TESObjectREFR.h:125
void SetEncounterZone(BGSEncounterZone *a_zone)
bool HasContainer() const
virtual bool IsDead(bool a_notEssential=true) const
void GetTransform(NiTransform &a_transform) const
float GetScale() const
virtual BGSDecalGroup * GetDecalGroup() const
float GetWeight() const
std::uint16_t refScale
Definition TESObjectREFR.h:468
constexpr float GetPositionX() const noexcept
Definition TESObjectREFR.h:405
NiPoint3 GetAngle() const
virtual void Unk_69(void)
virtual void Update3DPosition(bool a_warp)
void DoTrap(TrapEntry *a_trap, TargetEntry *a_target)
virtual bool SetDialogueWithPlayer(bool a_flag, bool a_forceGreet, TESTopicInfo *a_topic)
virtual TESObjectCELL * GetSaveParentCell() const
bool SetMotionType(hkpMotion::MotionType a_motionType, bool a_allowActivate=true)
bool HasKeywordInArray(const std::vector< BGSKeyword * > &a_keywords, bool a_matchAll) const
bool IsPersistent() const
TESObjectCELL * parentCell
Definition TESObjectREFR.h:464
virtual void DamageObject(float a_objectHealth, bool a_arg3)
bool IsEnchanted() const
void LoadGame(BGSLoadFormBuffer *a_buf) override
FormType GetSavedFormType() const override
NiControllerSequence * GetSequence(stl::zstring a_name) const
TESBoundObject * GetBaseObject()
virtual void PauseCurrentDialogue()
virtual bool CheckAndFixSkinAndBoneOrder(NiNode &a_nodeToTest)
virtual void Predestroy()
void SetOnLocalMap(bool a_set) override
virtual void Unk_78(void)
bool HasKeyword(const BGSKeyword *a_keyword) const
bool CheckSaveGame(BGSSaveFormBuffer *a_buf) override
virtual BSFaceGenAnimationData * GetFaceGenAnimationData()
NiAVObject * Get3D(bool a_firstPerson) const
float GetDistance(TESObjectREFR *a_other, bool a_disabledRefs=false, bool a_ignoreWorldspace=false) const
std::map< TESBoundObject *, Count > InventoryCountMap
Definition TESObjectREFR.h:121
constexpr float GetPositionY() const noexcept
Definition TESObjectREFR.h:406
TESForm * CreateDuplicateForm(bool a_createEditorID, void *a_arg2) override
virtual bool HasKeywordHelper(const BGSKeyword *a_keyword) const
virtual void Unk_75(void)
TESObjectREFR * AsReference1() override
virtual void SetActorCause(ActorCause *a_cause)
float GetAngleZ() const
bool BelongsInGroup(FORM *a_form, bool a_allowParentGroups, bool a_currentOnly) override
virtual BSFaceGenNiNode * GetFaceNodeSkinned()
virtual void TryUpdateActorLastSeenTime()
virtual void UpdateSoundCallBack(bool a_endSceneAction)
virtual bool ClampToGround()
virtual void DoTrap2(TrapEntry *a_trap, TargetEntry *a_target)
EnchantmentItem * GetEnchantment() const
virtual Explosion * AsExplosion()
virtual TESActorBase * GetTemplateActorBase()
bool MoveToNode(TESObjectREFR *a_target, NiAVObject *a_node)
virtual void SetCurrentScene(BGSScene *a_scene)
static constexpr auto VTABLE
Definition TESObjectREFR.h:117
OBJ_REFR data
Definition TESObjectREFR.h:463
const BSTSmartPointer< BipedAnim > & GetBiped() const
bool preDestroyed
Definition TESObjectREFR.h:470
virtual bool IsChild() const
virtual NiAVObject * Get3D1(bool a_firstPerson) const
virtual bool GetFullLODRef() const
virtual BSFaceGenNiNode * GetFaceNode()
bool GetRandomAnim() const override
InventoryDropMap GetDroppedInventory()
virtual void UnequipItem(std::uint64_t a_arg1, TESBoundObject *a_object)
std::int8_t modelState
Definition TESObjectREFR.h:469
InventoryCountMap GetInventoryCounts(std::function< bool(TESBoundObject &)> a_filter, bool a_noInit=false)
bool GetAnimationGraphManagerImpl(BSTSmartPointer< BSAnimationGraphManager > &a_out) const override
virtual bool Unk_A0(NiAVObject *a_node, float &a_angleX, float &a_angleZ, NiPoint3 &a_pos) const
virtual BGSLocation * GetEditorLocation1() const
virtual void SetFullLODRef(bool a_set)
virtual BSAnimNoteReceiver * CreateAnimNoteReceiver()
virtual bool ShouldPerformRevert() const
InventoryItemMap GetInventory()
bool IsHeadingMarker() const override
virtual bool ApplyCurrent(float a_velocityTime, const hkVector4 &a_velocity)
NiPointer< TESObjectREFR > PlaceObjectAtMe(TESBoundObject *a_baseToPlace, bool a_forcePersist) const
virtual void SetBiped(const BSTSmartPointer< BipedAnim > &a_biped)
virtual ActorCause * GetActorCause() const
virtual void UpdateRefLight()
bool IsHumanoid() const
void MoveTo(TESObjectREFR *a_target)
bool IsInWater() const
virtual const BSTSmartPointer< BipedAnim > & GetBiped2() const
InventoryDropMap GetDroppedInventory(std::function< bool(TESBoundObject &)> a_filter)
static NiPointer< TESObjectREFR > LookupByHandle(RefHandle a_refHandle)
virtual void Unk_68(void)
std::uint32_t GetStealValue(const InventoryEntryData *a_entryData, std::uint32_t a_numItems, bool a_useMult) const
bool IsDragon() const
float GetAngleY() const
BGSEncounterZone * GetEncounterZone() const
std::map< TESBoundObject *, std::pair< Count, std::vector< ObjectRefHandle > > > InventoryDropMap
Definition TESObjectREFR.h:123
virtual void GetLinearVelocity(NiPoint3 &a_velocity) const
virtual NiNode * GetFireNode()
virtual void DoTrap1(TrapData &a_data)
void SetOwner(TESForm *a_owner)
const TESObjectREFR * AsReference2() const override
void OpenContainer(std::int32_t a_openType) const
std::int32_t GetInventoryCount(bool no_init=false)
TESNPC * GetActorOwner()
std::int32_t Count
Definition TESObjectREFR.h:120
TESWorldSpace * GetWorldspace() const
virtual void AddObjectToContainer(TESBoundObject *a_object, ExtraDataList *a_extraList, std::int32_t a_count, TESObjectREFR *a_fromRefr)
bool ActivateRef(TESObjectREFR *a_activator, std::uint8_t a_arg2, TESBoundObject *a_object, std::int32_t a_count, bool a_defaultProcessingOnly)
bool IsHorse() const
bool IsWater() const override
bool SetupAnimEventSinks(const BSTSmartPointer< BShkbAnimationGraph > &a_animGraph) override
virtual NiPoint3 GetStartingAngle() const
InventoryCountMap GetInventoryCounts()
void SaveGame(BGSSaveFormBuffer *a_buf) override
bool GetMustUpdate() const override
virtual const BSTSmartPointer< BipedAnim > & GetBiped1(bool a_firstPerson) const
float GetAngleX() const
float GetSubmergeLevel(float a_zPos, TESObjectCELL *a_cell) const
static TESObjectREFR * FindReferenceFor3D(NiAVObject *a_object3D)
virtual void UpdateAnimation(float a_delta)
virtual TESAmmo * GetCurrentAmmo() const
void Revert(BGSLoadFormBuffer *a_buf) override
bool IsCrimeToActivate()
TESObjectREFR * GetLinkedRef(BGSKeyword *a_keyword)
bool IsAnimal() const
void SetActivationBlocked(bool a_blocked)
virtual bool QCanUpdateSync() const
std::uint64_t unk88
Definition TESObjectREFR.h:467
void InitItemImpl() override
virtual bool GetEditorLocation2(NiPoint3 &a_outPos, NiPoint3 &a_outRot, TESForm *&a_outWorldOrCell, TESObjectCELL *a_fallback)
ShaderReferenceEffect * ApplyEffectShader(TESEffectShader *a_effectShader, float a_duration=-1.0f, TESObjectREFR *a_facingRef=nullptr, bool a_faceTarget=false, bool a_attachToCamera=false, NiAVObject *a_attachNode=nullptr, bool a_interfaceEffect=false)
virtual void Set3D(NiAVObject *a_object, bool a_queue3DTasks=true)
virtual NiAVObject * Load3D(bool a_backgroundLoading)
void FinishLoadGame(BGSLoadFormBuffer *a_buf) override
float GetWaterHeight() const
virtual void Unk_96(void)
bool Load(TESFile *a_mod) override
virtual void SetActionComplete(bool a_set)
virtual void Release3DRelatedData()
bool IsInitiallyDisabled() const
virtual Projectile * AsProjectile()
void PlayAnimation(NiControllerManager *a_manager, NiControllerSequence *a_toSeq, NiControllerSequence *a_fromSeq)
bool GetEditorLocation(NiPoint3 &a_outPos, NiPoint3 &a_outRot, TESForm *&a_outWorldOrCell, TESObjectCELL *a_fallback)
virtual void Unk_6E(void)
virtual NiAVObject * GetCurrent3D() const
const BSTSmartPointer< BipedAnim > & GetBiped(bool a_firstPerson) const
const char * GetName() const
std::map< TESBoundObject *, std::pair< Count, std::unique_ptr< InventoryEntryData > > > InventoryItemMap
Definition TESObjectREFR.h:122
InventoryItemMap GetInventory(std::function< bool(TESBoundObject &)> a_filter, bool a_noInit=false)
virtual NiAVObject * Get3D2() const
NiAVObject * GetNodeByName(const BSFixedString &a_nodeName)
virtual BGSAnimationSequencer * GetSequencer() const
InventoryChanges * GetInventoryChanges(bool a_noInit=false)
virtual MagicCaster * GetMagicCaster(MagicSystem::CastingSource a_source)
LOCK_LEVEL GetLockLevel() const
static ObjectRefHandle CreateReference(ObjectRefHandle &a_handleOut, FormType a_formType, bool a_addActorToProcessList)
virtual void SetStartingPosition(const NiPoint3 &a_pos)
virtual BGSScene * GetCurrentScene() const
virtual void Unk_67(void)
void PlayAnimation(stl::zstring a_from, stl::zstring a_to)
void SetCollision(bool a_enable)
virtual bool ProcessInWater(hkpCollidable *a_collidable, float a_waterHeight, float a_deltaTime)
void InitLoadGame(BGSLoadFormBuffer *a_buf) override
void SetDelete(bool a_set) override
float GetHeadingAngle(const RE::NiPoint3 &a_pos, bool a_abs)
virtual void SetExclusiveBranch(BGSDialogueBranch *a_branch)
virtual bool OnAddCellPerformQueueReference(TESObjectCELL &a_cell) const
virtual TESPackage * CheckForCurrentAliasPackage()
virtual void ModifyAnimationUpdateData(BSAnimationUpdateData &a_data)
BGSLocation * GetEditorLocation() const
ObjectRefHandle CreateRefHandle()
virtual void Unk_94(void)
float GetHeight() const
bool HasCollision() const
bool GetObstacle() const override
bool NameIncludes(std::string_view a_word) const
virtual void SetParentCell(TESObjectCELL *a_cell)
virtual BSAnimNoteReceiver * GetAnimNoteReceiver()
NiAVObject * Get3D() const
virtual NiPoint3 GetBoundMax() const
virtual void SetObjectReference(TESBoundObject *a_object)
std::uint32_t pad94
Definition TESObjectREFR.h:471
virtual bool Is3rdPersonVisible() const
float GetBaseHeight() const
virtual NiPoint3 GetStartingLocation() const
void InitializeData() override
virtual BGSDialogueBranch * GetExclusiveBranch() const
void Enable(bool a_resetInventory)
virtual NiPoint3 GetBoundMin() const
bool GetOnLocalMap() const override
virtual bool UpdateInDialogue(DialogueResponse *a_response, bool a_unused)
bool SetAnimationGraphManagerImpl(BSTSmartPointer< BSAnimationGraphManager > &a_in) override
constexpr TESBoundObject * GetObjectReference() const noexcept
Definition TESObjectREFR.h:401
ObjectRefHandle GetHandle()
bool HasKeywordInList(BGSListForm *a_keywordList, bool a_matchAll) const
virtual void RemoveWeapon(BIPED_OBJECT equipIndex)
bool InitInventoryIfRequired(bool a_ignoreContainerExtraData=false)
TESForm * GetOwner() const
bool IsMarkedForDeletion() const
bool ConstructAnimationGraph(BSTSmartPointer< BShkbAnimationGraph > &a_out) override
std::optional< double > GetEnchantmentCharge() const
virtual void TryMoveToMiddleLow()
TESContainer * GetContainer() const
bool Is3DLoaded() const
const TESBoundObject * GetBaseObject() const
virtual bool TryChangeSkyCellActorsProcessLevel()
virtual bool InitNonNPCAnimation(NiNode &a_nodeForAnim)
REFR_LOCK * GetLock() const
void SetPosition(NiPoint3 a_pos)
bool IsAnOwner(const Actor *a_testOwner, bool a_useFaction, bool a_requiresOwner) const
void GetFormDetailedString(char *a_buf, std::uint32_t a_bufLen) override
constexpr TESObjectCELL * GetParentCell() const noexcept
Definition TESObjectREFR.h:403
virtual bool PopulateGraphProjectsToLoad(void) const
virtual ObjectRefHandle RemoveItem(TESBoundObject *a_item, std::int32_t a_count, ITEM_REMOVE_REASON a_reason, ExtraDataList *a_extraList, TESObjectREFR *a_moveToRef, const NiPoint3 *a_dropLoc=0, const NiPoint3 *a_rotate=0)
bool GetIgnoredBySandbox() const override
virtual void SetMovementComplete(bool a_set)
virtual void Unk_83(void)
virtual bool ShouldSaveAnimationOnSaving() const
const char * GetFormEditorID() const override
virtual bool ShouldBackgroundClone() const
constexpr float GetPositionZ() const noexcept
Definition TESObjectREFR.h:407
static constexpr auto FORMTYPE
Definition TESObjectREFR.h:118
void CreateGroupData(FORM *a_form, FORM_GROUP *a_group) override
void DoTrap(TrapData &a_data)
~TESObjectREFR() override
virtual NiPoint3 GetLookingAtLocation() const
TESFaction * GetFactionOwner()
virtual bool ShouldSaveAnimationOnUnloading() const
float GetWeightInContainer()
virtual const BSTSmartPointer< BipedAnim > & GetCurrentBiped() const
virtual void Disable()
bool IsActivationBlocked() const
constexpr NiPoint3 GetPosition() const noexcept
Definition TESObjectREFR.h:404
virtual bool AddWornItem(TESBoundObject *a_item, std::int32_t a_count, bool a_forceEquip, std::uint32_t a_arg4, std::uint32_t a_arg5)
virtual void SetFireNode(NiNode *a_fireNode)
bool HasQuestObject() const
virtual void ResetInventory(bool a_leveledOnly)
virtual bool DetachHavok(NiAVObject *a_obj3D)
static constexpr auto RTTI
Definition TESObjectREFR.h:116
bool GetDangerous() const override
virtual void MoveHavok(bool a_forceRec)
bool SetDisplayName(const BSFixedString &a_name, bool a_force)
bool IsLocked() const
bool IsDisabled() const
virtual MagicTarget * GetMagicTarget()
virtual void ForceEditorLocation(BGSLocation *a_location)
void PostChangeAnimationManager(const BSTSmartPointer< BShkbAnimationGraph > &a_arg1, const BSTSmartPointer< BShkbAnimationGraph > &a_arg2) override
static bool LookupByHandle(RefHandle a_refHandle, NiPointer< TESObjectREFR > &a_refrOut)
void SetAltered(bool a_set) override
bool IsJewelry() const
bool PopulateGraphNodesToTarget(BSScrapArray< NiAVObject * > &a_nodes) override
ExtraDataList extraList
Definition TESObjectREFR.h:466
std::uint16_t GetCalcLevel(bool a_adjustLevel) const
bool HasKeywordWithType(DEFAULT_OBJECT keywordType) const
ModelReferenceEffect * ApplyArtObject(BGSArtObject *a_artObject, float a_duration=-1.0f, TESObjectREFR *a_facingRef=nullptr, bool a_faceTarget=false, bool a_attachToCamera=false, NiAVObject *a_attachNode=nullptr, bool a_interfaceEffect=false)
virtual void SetTemplateActorBase(TESActorBase *a_template)
BGSLocation * GetCurrentLocation() const
virtual void DoMoveToHigh()
void InitChildActivates(TESObjectREFR *a_actionRef)
void SetPosition(float a_x, float a_y, float a_z)
bool MoveToNode(TESObjectREFR *a_target, const BSFixedString &a_nodeName)
BSEventNotifyControl ProcessEvent(const BSAnimationGraphEvent *a_event, BSTEventSource< BSAnimationGraphEvent > *a_dispatcher) override
bool IsPointSubmergedMoreThan(const NiPoint3 &a_pos, TESObjectCELL *a_cell, float a_waterLevel) const
Definition TESPackage.h:310
Definition TESTopicInfo.h:42
Definition TESWaterForm.h:83
Definition TESWorldSpace.h:118
Definition hkVector4.h:9
Definition hkpCollidable.h:13
MotionType
Definition hkpMotion.h:27
CastingSource
Definition MagicSystem.h:27
Definition AbsorbEffect.h:6
constexpr std::array< REL::ID, 4 > VTABLE_TESObjectREFR
Definition Offsets_VTABLE.h:12868
LOCK_LEVEL
Definition ExtraLock.h:10
FormType
Definition FormTypes.h:139
constexpr REL::ID RTTI_TESObjectREFR(static_cast< std::uint64_t >(513899))
ITEM_REMOVE_REASON
Definition TESObjectREFR.h:65
std::uint32_t RefHandle
Definition BSCoreTypes.h:6
BSEventNotifyControl
Definition BSTEvent.h:12
basic_zstring< char > zstring
Definition PCH.h:81
Definition BGSDecalGroup.h:61
BIPED_OBJECT
Definition BipedObjects.h:8
Definition BSAnimationGraphEvent.h:10
Definition BSAnimationUpdateData.h:10
DEFAULT_OBJECT
Definition BGSDefaultObjectManager.h:12
Definition FORM.h:20
Definition FORM.h:6
Definition TESObjectREFR.h:85
std::uint64_t unk40
Definition TESObjectREFR.h:97
BSTSmallArray< void * > unk00
Definition TESObjectREFR.h:88
std::uint16_t flags
Definition TESObjectREFR.h:92
std::uint64_t unk38
Definition TESObjectREFR.h:96
std::uint64_t unk30
Definition TESObjectREFR.h:95
std::uint64_t unk60
Definition TESObjectREFR.h:101
float cachedRadius
Definition TESObjectREFR.h:91
std::uint32_t pad2C
Definition TESObjectREFR.h:94
NiPointer< NiAVObject > data3D
Definition TESObjectREFR.h:102
TESWaterForm * currentWaterType
Definition TESObjectREFR.h:89
float relevantWaterHeight
Definition TESObjectREFR.h:90
std::uint64_t unk50
Definition TESObjectREFR.h:99
std::int16_t underwaterCount
Definition TESObjectREFR.h:93
void * unk70
Definition TESObjectREFR.h:103
std::uint64_t unk48
Definition TESObjectREFR.h:98
std::uint64_t unk58
Definition TESObjectREFR.h:100
Definition TESObjectREFR.h:75
TESBoundObject * objectReference
Definition TESObjectREFR.h:78
NiPoint3 angle
Definition TESObjectREFR.h:79
NiPoint3 location
Definition TESObjectREFR.h:80
Definition ExtraLock.h:21
Definition TESObjectREFR.h:128
ChangeFlag
Definition TESObjectREFR.h:130
@ kCellChanged
Definition TESObjectREFR.h:133
@ kOwnershipExtra
Definition TESObjectREFR.h:136
@ kBaseObject
Definition TESObjectREFR.h:137
@ kLockExtra
Definition TESObjectREFR.h:140
@ kHavokMoved
Definition TESObjectREFR.h:132
@ kLeveledInventory
Definition TESObjectREFR.h:146
@ kOpenDefaultState
Definition TESObjectREFR.h:142
@ kEncZoneExtra
Definition TESObjectREFR.h:148
@ kInventory
Definition TESObjectREFR.h:135
@ kAmmoExtra
Definition TESObjectREFR.h:139
@ kActivatingChildren
Definition TESObjectREFR.h:145
@ kPromoted
Definition TESObjectREFR.h:144
@ kEmpty
Definition TESObjectREFR.h:141
@ kScale
Definition TESObjectREFR.h:134
@ kItemExtraData
Definition TESObjectREFR.h:138
@ kAnimation
Definition TESObjectREFR.h:147
@ kOpenState
Definition TESObjectREFR.h:143
@ kMoved
Definition TESObjectREFR.h:131
@ kCreatedOnlyExtra
Definition TESObjectREFR.h:149
@ kGameOnlyExtra
Definition TESObjectREFR.h:150
Definition TESObjectREFR.h:155
RecordFlag
Definition TESObjectREFR.h:157
@ kInitiallyDisabled
Definition TESObjectREFR.h:172
@ kLODRespectsEnableState
Definition TESObjectREFR.h:166
@ kGround
Definition TESObjectREFR.h:193
@ kIgnoreFriendlyHits
Definition TESObjectREFR.h:184
@ kReflectedByAutoWater
Definition TESObjectREFR.h:189
@ kTurnOffFire
Definition TESObjectREFR.h:163
@ kCollisionGeometry_BoundingBox
Definition TESObjectREFR.h:188
@ kPersistent
Definition TESObjectREFR.h:171
@ kNoAIAcquire
Definition TESObjectREFR.h:186
@ kStartUnconscious
Definition TESObjectREFR.h:175
@ kStartsDead
Definition TESObjectREFR.h:167
@ kMotionBlur
Definition TESObjectREFR.h:170
@ kHiddenFromLocalMap
Definition TESObjectREFR.h:162
@ kIgnored
Definition TESObjectREFR.h:173
@ kIsFullLOD
Definition TESObjectREFR.h:179
@ kInaccessible
Definition TESObjectREFR.h:165
@ kCollisionsDisabled
Definition TESObjectREFR.h:159
@ kDeleted
Definition TESObjectREFR.h:161
@ kDontHavokSettle
Definition TESObjectREFR.h:191
@ kIsGroundPiece
Definition TESObjectREFR.h:158
@ kNeverFades
Definition TESObjectREFR.h:180
@ kSkyMarker
Definition TESObjectREFR.h:176
@ kDoesntLightLandscape
Definition TESObjectREFR.h:182
@ kRespawns
Definition TESObjectREFR.h:194
@ kMultibound
Definition TESObjectREFR.h:196
@ kCollisionGeometry_Filter
Definition TESObjectREFR.h:187
@ kHarvested
Definition TESObjectREFR.h:177
@ kDoesntLightWater
Definition TESObjectREFR.h:168