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