CommonLibSSE (powerof3)
Loading...
Searching...
No Matches
Actor.h
Go to the documentation of this file.
1#pragma once
2
3#include "RE/A/AITimeStamp.h"
4#include "RE/A/ActiveEffect.h"
5#include "RE/A/ActorState.h"
7#include "RE/A/ActorValues.h"
12#include "RE/B/BSTArray.h"
13#include "RE/B/BSTEvent.h"
14#include "RE/B/BSTList.h"
16#include "RE/B/BSTTuple.h"
18#include "RE/E/EmotionTypes.h"
19#include "RE/F/FormTypes.h"
21#include "RE/M/MagicSystem.h"
22#include "RE/M/MagicTarget.h"
23#include "RE/N/NiSmartPointer.h"
24#include "RE/T/TESNPC.h"
25#include "RE/T/TESObjectREFR.h"
26
27#include "REX/W32/BASE.h"
28
29namespace RE
30{
31 enum class FIGHT_REACTION;
32
33 class ActorMagicCaster;
34 class ActorMover;
35 class AIProcess;
36 class bhkCharacterController;
37 class bhkCharacterMoveFinishEvent;
38 class BipedAnim;
39 class BSTransformDeltaEvent;
40 class CombatController;
41 class CombatGroup;
42 class ExtraDataList;
43 class InventoryEntryData;
44 class MovementControllerNPC;
45 class MovementMessageActorCollision;
46 class NiRefObject;
47 class PackageLocation;
48 class PerkEntryVisitor;
49 class TrespassPackage;
50 struct ActorMotionFeedbackData;
51 struct ActorMotionFeedbackOutput;
52 struct HighProcessData;
53 struct MiddleHighProcessData;
54
56 {
57 kNone = 0,
58 kGooStart = 1,
59 kGooEnd = 2,
62
63 kTotal
64 };
65
66 struct Modifiers
67 {
68 public:
69 // members
71 };
72 static_assert(sizeof(Modifiers) == 0xC);
73
75 {
76 public:
77 template <class T>
78 struct LocalMap
79 {
80 public:
81 T* operator[](ActorValue a_actorValue)
82 {
83 return GetAt(static_cast<char>(a_actorValue));
84 }
85
86 const T* operator[](ActorValue a_actorValue) const
87 {
88 return GetAt(static_cast<char>(a_actorValue));
89 }
90
91 // members
93 T* entries; // 08
94
95 private:
96 [[nodiscard]] T* GetAt(char a_actorValue) const
97 {
98 auto akVals = actorValues.data();
99 if (akVals && entries) {
100 std::uint32_t idx = 0;
101 while (akVals[idx] != '\0') {
102 if (akVals[idx] == a_actorValue) {
103 break;
104 }
105 ++idx;
106 }
107
108 if (akVals[idx] != '\0') {
109 return std::addressof(entries[idx]);
110 }
111 }
112 return 0;
113 }
114 };
115 static_assert(sizeof(LocalMap<float>) == 0x10);
116
117 // members
120 };
121 static_assert(sizeof(ActorValueStorage) == 0x20);
122
124
125 class Actor :
126 public TESObjectREFR, // 000
127 public MagicTarget, // 0A0
128 public ActorValueOwner, // 0B8
129 public ActorState, // 0C0
130 public BSTEventSink<BSTransformDeltaEvent>, // 0D0
131 public BSTEventSink<bhkCharacterMoveFinishEvent>, // 0D8
133 {
134 private:
136
137 public:
138 inline static constexpr auto RTTI = RTTI_Actor;
139 inline static constexpr auto VTABLE = VTABLE_Actor;
140 inline static constexpr auto FORMTYPE = FormType::ActorCharacter;
141
143 {
144 enum
145 {
150
151 kTotal
152 };
153 };
154
155 enum class BOOL_BITS
156 {
157 kNone = 0,
158 kDelayUpdateScenegraph = 1 << 0,
159 kProcessMe = 1 << 1,
160 kMurderAlarm = 1 << 2,
161 kHasSceneExtra = 1 << 3,
162 kHeadingFixed = 1 << 4,
163 kSpeakingDone = 1 << 5,
165 kSoundFileDone = 1 << 7,
166 kVoiceFileDone = 1 << 8,
167 kInTempChangeList = 1 << 9,
168 kDoNotRunSayToCallback = 1 << 10,
169 kDead = 1 << 11,
170 kForceGreetingPlayer = 1 << 12,
171 kForceUpdateQuestTarget = 1 << 13,
172 kSearchingInCombat = 1 << 14,
173 kAttackOnNextTheft = 1 << 15,
174 kEvpBuffered = 1 << 16,
175 kResetAI = 1 << 17,
176 kInWater = 1 << 18,
177 kSwimming = 1 << 19,
178 kVoicePausedByScript = 1 << 20,
179 kWasInFrustrum = 1 << 21,
180 kShouldRotateToTrack = 1 << 22,
181 kSetOnDeath = 1 << 23,
182 kDoNotPadVoice = 1 << 24,
183 kFootIKInRange = 1 << 25,
184 kPlayerTeammate = 1 << 26,
185 kGivePlayerXP = 1 << 27,
186 kSoundCallbackSuccess = 1 << 28,
187 kUseEmotion = 1 << 29,
188 kGuard = 1 << 30,
189 kParalyzed = 1 << 31
190 };
191
192 enum class BOOL_FLAGS
193 {
194 kNone = 0,
195 kScenePackage = 1 << 0,
196 kIsAMount = 1 << 1,
197 kMountPointClear = 1 << 2,
198 kGettingOnOffMount = 1 << 3,
199 kInRandomScene = 1 << 4,
200 kNoBleedoutRecovery = 1 << 5,
201 kInBleedoutAnimation = 1 << 6,
202 kCanDoFavor = 1 << 7,
203 kShouldAnimGraphUpdate = 1 << 8,
205 kBribedByPlayer = 1 << 10,
206 kAngryWithPlayer = 1 << 11,
207 kIsTrespassing = 1 << 12,
208 kCanSpeak = 1 << 13,
209 kIsInKillMove = 1 << 14,
210 kAttackOnSight = 1 << 15,
211 kIsCommandedActor = 1 << 16,
212 kForceOneAnimgraphUpdate = 1 << 17,
213 kEssential = 1 << 18,
214 kProtected = 1 << 19,
215 kAttackingDisabled = 1 << 20,
216 kCastingDisabled = 1 << 21,
217 kSceneHeadTrackRotation = 1 << 22,
218 kForceIncMinBoneUpdate = 1 << 23,
219 kCrimeSearch = 1 << 24,
220 kMovingIntoLoadedArea = 1 << 25,
221 kDoNotShowOnStealthMeter = 1 << 26,
222 kMovementBlocked = 1 << 27,
224 kForceAnimGraphUpdate = 1 << 29,
225 kCheckAddEffectDualCast = 1 << 30,
226 kUnderwater = 1 << 31
227 };
228
230 {
231 enum ChangeFlag : std::uint32_t
232 {
233 kLifeState = 1 << 10,
237 kLeveledActor = 1 << 18,
238 kDispModifiers = 1 << 19,
239 kTempModifiers = 1 << 20,
243 };
244 };
245
247 {
248 enum RecordFlag : std::uint32_t
249 {
250 kDeleted = 1 << 5,
251 kStartsDead = 1 << 9,
252 kPersistent = 1 << 10,
254 kIgnored = 1 << 12,
255 kNoAIAcquire = 1 << 25,
256 kDontHavokSettle = 1 << 29
257 };
258 };
259
261 {
262 public:
263 inline static constexpr auto RTTI = RTTI_Actor__ForEachSpellVisitor;
264 inline static constexpr auto VTABLE = VTABLE_Actor__ForEachSpellVisitor;
265
266 virtual ~ForEachSpellVisitor() = default; // 00
267
268 // add
269 virtual BSContainer::ForEachResult Visit(SpellItem* a_spell) = 0; // 01
270 };
271
272 ~Actor() override; // 000
273
274 // override (TESObjectREFR)
275 void SaveGame(BGSSaveFormBuffer* a_buf) override; // 00E
276 void LoadGame(BGSLoadFormBuffer* a_buf) override; // 00F
277 void InitLoadGame(BGSLoadFormBuffer* a_buf) override; // 010
278 void FinishLoadGame(BGSLoadFormBuffer* a_buf) override; // 011
279 void Revert(BGSLoadFormBuffer* a_buf) override; // 012
280 void InitItemImpl() override; // 013
281 void SetDelete(bool a_set) override; // 023
282 void Predestroy() override; // 03B
283 BGSLocation* GetEditorLocation1() const override; // 03C - { return editorLocation; }
284 bool GetEditorLocation2(NiPoint3& a_outPos, NiPoint3& a_outRot, TESForm*& a_outWorldOrCell, TESObjectCELL* a_fallback) override; // 03D
285 void ForceEditorLocation(BGSLocation* a_location) override; // 03E - { editorLocation = a_location; }
286 void Update3DPosition(bool a_warp) override; // 03F
287 void UpdateSoundCallBack(bool a_endSceneAction) override; // 040
288 bool SetDialogueWithPlayer(bool a_flag, bool a_forceGreet, TESTopicInfo* a_topic) override; // 041
289 BGSAnimationSequencer* GetSequencer(void) const override; // 045 - { return currentProcess->high->animSequencer; }
290 bool HasKeywordHelper(const BGSKeyword* a_keyword) const override; // 048
291 TESPackage* CheckForCurrentAliasPackage() override; // 049 - { return 0; }
292 BGSScene* GetCurrentScene() const override; // 04A
293 void SetCurrentScene(BGSScene* a_scene) override; // 04B
294 bool UpdateInDialogue(DialogueResponse* a_response, bool a_unused) override; // 04C
295 BGSDialogueBranch* GetExclusiveBranch() const override; // 04D - { return exclusiveBranch; }
296 void SetExclusiveBranch(BGSDialogueBranch* a_branch) override; // 04E - { exclusiveBranch = a_arg1; }
297 void PauseCurrentDialogue(void) override; // 04F
298 NiPoint3 GetStartingAngle() const override; // 052
299 NiPoint3 GetStartingLocation() const override; // 053
300 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) override; // 056
301 bool AddWornItem(TESBoundObject* a_item, std::int32_t a_count, bool a_forceEquip, std::uint32_t a_arg4, std::uint32_t a_arg5) override; // 057
302 void DoTrap1(TrapData& a_data) override; // 058
303 void DoTrap2(TrapEntry* a_trap, TargetEntry* a_target) override; // 059
304 void AddObjectToContainer(TESBoundObject* a_object, ExtraDataList* a_extraList, std::int32_t a_count, TESObjectREFR* a_fromRefr) override; // 05A
305 NiPoint3 GetLookingAtLocation() const override; // 05B
307 MagicTarget* GetMagicTarget() override; // 05D - { return static_cast<MagicTarget*>(this); }
308 bool IsChild() const override; // 05E - { return false; }
310 bool DetachHavok(NiAVObject* a_obj3D) override; // 065
311 void InitHavok() override; // 066
312 void Unk_67(void) override; // 067 - related to vampire lord cape
313 void Unk_68(void) override; // 068 - verlet physics
314 void Unk_69(void) override; // 069 - verlet physics
315 NiAVObject* Load3D(bool a_arg1) override; // 06A
316 void Set3D(NiAVObject* a_object, bool a_queue3DTasks = true) override; // 06C
317 bool PopulateGraphProjectsToLoad(void) const override; // 072
318 NiPoint3 GetBoundMin() const override; // 073
319 NiPoint3 GetBoundMax() const override; // 074
320 void Unk_75(void) override; // 075 - "ActorValue GetWeaponSkill()"? really weird call, only works for right hand, and defaults to 1
321 void Unk_78(void) override; // 078
323 bool ShouldSaveAnimationOnUnloading() const override; // 07A - { return false; }
324 bool ShouldSaveAnimationOnSaving() const override; // 07B
325 bool ShouldPerformRevert() const override; // 07C
326 void UpdateAnimation(float a_delta) override; // 07D
327 void RemoveWeapon(BIPED_OBJECT equipIndex) override; // 082
328 void SetObjectReference(TESBoundObject* a_object) override; // 084
329 void MoveHavok(bool a_forceRec) override; // 085
330 void GetLinearVelocity(NiPoint3& a_velocity) const override; // 086
331 void SetActionComplete(bool a_set) override; // 087
332 void Disable() override; // 089
333 void ResetInventory(bool a_leveledOnly) override; // 08A
334 NiNode* GetFireNode() override; // 08B
335 void SetFireNode(NiNode* a_fireNode) override; // 08C
336 bool OnAddCellPerformQueueReference(TESObjectCELL& a_cell) const override; // 090
337 void DoMoveToHigh() override; // 091
338 void TryMoveToMiddleLow() override; // 092
340 void TryUpdateActorLastSeenTime() override; // 095
341 void Unk_96(void) override; // 096
342 void SetParentCell(TESObjectCELL* a_cell) override; // 098
343 bool IsDead(bool a_notEssential = true) const override; // 099
344 bool ProcessInWater(hkpCollidable* a_collidable, float a_waterHeight, float a_deltaTime) override; // 09C
345 bool ApplyCurrent(float a_velocityTime, const hkVector4& a_velocity) override; // 09D
346 TESAmmo* GetCurrentAmmo() const override; // 09E
347 void UnequipItem(std::uint64_t a_arg1, TESBoundObject* a_object) override; // 0A1
348
349 // override (MagicTarget)
350 Actor* GetTargetStatsObject() override; // 002 - { return this; }
351 bool MagicTargetIsActor() const override; // 003 - { return true; }
353
354 // add
355 virtual void Unk_A2(void); // 0A2
356 virtual void PlayPickUpSound(TESBoundObject* a_object, bool a_pickup, bool a_use); // 0A3
357 virtual float GetHeading(bool a_ignoreRaceSettings) const; // 0A4
358 virtual void SetAvoidanceDisabled(bool a_set); // 0A5 - { return; }
359 virtual void DrawWeaponMagicHands(bool a_draw); // 0A6
360 virtual void DetachCharController(); // 0A7
361 virtual void RemoveCharController(); // 0A8
362 virtual void SetPosition(const NiPoint3& a_pos, bool a_updateCharController); // 0A9
363 virtual void KillDying(); // 0AA
364 virtual void Resurrect(bool a_resetInventory, bool a_attach3D); // 0AB
365 virtual bool PutActorOnMountQuick(); // 0AC
366 virtual void Update(float a_delta); // 0AD
367 virtual void UpdateNoAI(float a_delta); // 0AE - { return UpdateActor3DPosition(); }
369 virtual void PotentiallyFixRagdollState(); // 0B0
370 virtual void UpdateNonRenderSafe(float a_delta); // 0B1
371 virtual void OnItemEquipped(bool a_playAnim); // 0B2
372 virtual void Unk_B3(void); // 0B3 - { return 1; }
373 virtual void Unk_B4(void); // 0B4
374 virtual void SetCrimeGoldValue(TESFaction* a_faction, bool a_violent, std::uint32_t a_amount); // 0B5
375 virtual void ModCrimeGoldValue(TESFaction* a_faction, bool a_violent, std::int32_t a_amount); // 0B6
376 virtual void RemoveCrimeGoldValue(TESFaction* a_faction, bool a_violent, std::int32_t a_amount); // 0B7
377 virtual std::uint32_t GetCrimeGoldValue(const TESFaction* a_faction) const; // 0B8
378 virtual void GoToPrison(TESFaction* a_faction, bool a_removeInventory, bool a_realJail); // 0B9 - { return; }
379 virtual void ServePrisonTime(); // 0BA - { return; }
380 virtual void PayFine(TESFaction* a_faction, bool a_goToJail, bool a_removeStolenItems); // 0BB - { return; }
381 virtual bool GetCannibal(); // 0BC - { return false; }
382 virtual void SetCannibal(bool a_set); // 0BD - { return; }
383 virtual bool GetVampireFeed(); // 0BE - { return false; }
384 virtual void SetVampireFeed(bool a_set); // 0BF - { return; }
385 virtual void InitiateVampireFeedPackage(Actor* a_target, TESObjectREFR* a_furniture); // 0C0 - { return; }
386 virtual void InitiateCannibalPackage(Actor* a_target); // 0C1 - { return; }
387 virtual void GetEyeVector(NiPoint3& a_origin, NiPoint3& a_direction, bool a_includeCameraOffset); // 0C2
388 virtual void SetRefraction(bool a_enable, float a_refraction); // 0C3
389 virtual void Unk_C4(void); // 0C4 - { return; }
390 virtual void Unk_C5(void); // 0C5 - { return 1; }
391 virtual void Unk_C6(void) = 0; // 0C6
392 virtual float GetAcrobatics() const; // 0C7 - { return 1.0; }
393 virtual bhkCharacterController* Move(float a_arg2, const NiPoint3& a_position); // 0C8
394 virtual void Unk_C9(void); // 0C9
395 virtual void OnArmorActorValueChanged(); // 0CA - { return; }
396 virtual ObjectRefHandle DropObject(const TESBoundObject* a_object, ExtraDataList* a_extraList, std::int32_t a_count, const NiPoint3* a_dropLoc = 0, const NiPoint3* a_rotate = 0); // 0CB
397 virtual void PickUpObject(TESObjectREFR* a_object, std::int32_t a_count, bool a_arg3 = false, bool a_playSound = true); // 0CC
398 virtual void AttachArrow(const BSTSmartPointer<BipedAnim>& a_biped); // 0CD
399 virtual void DetachArrow(const BSTSmartPointer<BipedAnim>& a_biped); // 0CE
400 virtual bool AddShout(TESShout* a_shout); // 0CF
401 virtual void UnlockWord(TESWordOfPower* a_power); // 0D0 - { return; }
402 virtual void Unk_D1(void); // 0D1
403 virtual std::uint32_t UseAmmo(std::uint32_t a_shotCount); // 0D2
404 virtual bool CalculateCachedOwnerIsInCombatantFaction() const; // 0D3
405 virtual CombatGroup* GetCombatGroup() const; // 0D4
406 virtual void SetCombatGroup(CombatGroup* a_group); // 0D5
407 virtual bool CheckValidTarget(TESObjectREFR& a_target); // 0D6
408 virtual bool InitiateTresPassPackage(TrespassPackage* a_trespassPackage); // 0D7 - { return 0; }
409 virtual void InitiateDialogue(Actor* a_target, PackageLocation* a_loc1, PackageLocation* a_loc2); // 0D8
410 virtual void SetSize(float a_size); // 0D9
411 virtual void EndDialogue(); // 0DA
412 virtual Actor* SetUpTalkingActivatorActor(Actor* a_target, Actor*& a_activator); // 0DB
413 virtual void InitiateSpectator(Actor* a_target); // 0DC - { return; }
414 virtual void InitiateFlee(TESObjectREFR* a_fleeRef, bool a_runOnce, bool a_knows, bool a_combatMode, TESObjectCELL* a_cell, TESObjectREFR* a_ref, float a_fleeFromDist, float a_fleeToDist); // 0DD
415 virtual void InitiateGetUpPackage(); // 0DE
416 virtual void PutCreatedPackage(TESPackage* a_package, bool a_tempPackage, bool a_createdPackage); // 0DF
417 virtual void UpdateAlpha(); // 0E0
418 virtual void SetAlpha(float a_alpha = 1.0); // 0E1
419 virtual float GetAlpha(); // 0E2
420 virtual bool IsInCombat() const; // 0E3
421 virtual void UpdateCombat(); // 0E4
422 virtual void StopCombat(); // 0E5
423 virtual float CalcArmorRating(); // 0E6 - { return 0.0; }
424 virtual float GetArmorBaseFactorSum(); // 0E7 - { return 0.0; }
425 virtual float CalcUnarmedDamage(); // 0E8 - { return 0; }
426 virtual void Unk_E9(void); // 0E9 - { return 0; }
427 virtual void Unk_EA(void); // 0EA - { return 0; }
428 virtual float GetRunSpeed(); // 0EB
429 virtual float GetJogSpeed(); // 0EC
430 virtual float GetFastWalkSpeed(); // 0ED
431 virtual float GetWalkSpeed(); // 0EE
432 virtual void WeaponSwingCallBack(); // 0EF
433 virtual void SetActorStartingPosition(); // 0F0
434 virtual bool MoveToHigh(); // 0F1
435 virtual bool MovetoLow(); // 0F2
436 virtual bool MovetoMiddleLow(); // 0F3
437 virtual bool MoveToMiddleHigh(); // 0F4
438 virtual bool HasBeenAttacked() const; // 0F5
439 virtual void SetBeenAttacked(bool a_set); // 0F6
440 virtual void UseSkill(ActorValue a_av, float a_points, TESForm* a_arg3); // 0F7 - { return; }
441 virtual bool IsAtPoint(const NiPoint3& a_point, float a_radius, bool a_expandRadius, bool a_alwaysTestHeight); // 0F8
442 virtual bool IsInFaction(const TESFaction* faction) const; // 0F9
443 virtual void ForEachPerk(PerkEntryVisitor& a_visitor) const; // 0FA
444 virtual void AddPerk(BGSPerk* a_perk, std::uint32_t a_rank = 0); // 0FB - { return; }
445 virtual void RemovePerk(BGSPerk* a_perk); // 0FC - { return; }
446 virtual void ApplyTemporaryPerk(BGSPerk* a_perk); // 0FD - { return; }
447 virtual void RemoveTemporaryPerk(BGSPerk* a_perk); // 0FE - { return; }
448 virtual bool HasPerkEntries(EntryPoint a_entryType) const; // 0FF
449 virtual void ForEachPerkEntry(EntryPoint a_entryType, PerkEntryVisitor& a_visitor) const; // 100
450 virtual void ApplyPerksFromBase(); // 101
451 virtual void StartPowerAttackCoolDown(); // 102 - { return; }
452 virtual bool IsPowerAttackCoolingDown() const; // 103 - { return false; }
453 virtual void HandleHealthDamage(Actor* a_attacker, float a_damage); // 104
454 virtual void Unk_105(void); // 105
455 virtual void Unk_106(void); // 106 - { return; }
456 virtual bool QSpeakingDone() const; // 107 - { return ~(unk0E0 >> 5) & 1; }
457 virtual void SetSpeakingDone(bool a_set); // 108
458 virtual void CreateMovementController(); // 109
459 virtual EmotionType GetEmotionType(); // 10A - { return unk16C; }
460 virtual void SetEmotionType(EmotionType a_emotionType); // 10B - { unk16C = a_arg1; }
461 virtual std::uint32_t GetEmotionValue(); // 10C - { return unk170; }
462 virtual void SetEmotionValue(std::uint32_t a_emotionValue); // 10D - { unk170 = a_arg1; }
463 virtual void KillImpl(Actor* a_attacker, float a_damage, bool a_sendEvent, bool a_ragdollInstant); // 10E
464 virtual bool DrinkPotion(AlchemyItem* a_potion, ExtraDataList* a_extralist); // 10F
465 virtual bool CheckCast(MagicItem* a_spell, bool a_dualCast, MagicSystem::CannotCastReason* a_reason); // 110
466 virtual void CheckTempModifiers(); // 111 - { return; }
467 virtual std::int32_t GetCurrentShoutLevel(); // 112 - return -1 on error
468 virtual void SetLastRiddenMount(ActorHandle a_mount); // 113 - { return; }
469 virtual ActorHandle QLastRiddenMount() const; // 114 - { return {}; }
470 virtual bool CalculateCachedOwnerIsUndead() const; // 115
471 virtual bool CalculateCachedOwnerIsNPC() const; // 116
472 virtual void Unk_117(void); // 117 - { return; }
473 virtual void InitValues(); // 118
474 virtual const BSFixedString& GetResponseString() const; // 119 - { return "ActorResponse"; }
475 virtual void ModifyMovementData(float a_delta, NiPoint3& a_arg3, NiPoint3& a_arg4); // 11A
476 virtual void UpdateCombatControllerSettings(); // 11B
477 virtual void UpdateFadeSettings(bhkCharacterController* a_controller); // 11C
478 virtual bool ComputeMotionFeedbackSpeedAndDirection(const ActorMotionFeedbackData& a_data, float a_delta, ActorMotionFeedbackOutput& a_output); // 11D
479 virtual bool UpdateFeedbackGraphSpeedAndDirection(const ActorMotionFeedbackOutput& a_output); // 11E
480 virtual void UpdateActor3DPosition(); // 11F
481 virtual void PrecacheData(); // 120
482 virtual void WornArmorChanged(void); // 121
483 virtual void ProcessTracking(float a_delta, NiAVObject* a_obj3D); // 122
484 virtual void Unk_123(void); // 123
485 virtual void CreateActorMover(); // 124
486 virtual void DestroyActorMover(); // 125
487 virtual bool ShouldRespondToActorCollision(const MovementMessageActorCollision& a_msg, const ActorHandlePtr& a_target); // 126
488 virtual float CheckClampDamageModifier(ActorValue a_av, float a_delta); // 127
489
491 static bool LookupByHandle(RefHandle a_refHandle, NiPointer<Actor>& a_refrOut);
492
494 void AddCastPower(SpellItem* a_power);
496 bool AddSpell(SpellItem* a_spell);
497 void AddToFaction(TESFaction* a_faction, std::int8_t a_rank);
498 void AddWornOutfit(BGSOutfit* a_outfit, bool a_forceUpdate);
499 void AllowBleedoutDialogue(bool a_canTalk);
500 void AllowPCDialogue(bool a_talk);
501 void CastPermanentMagic(bool a_wornItemEnchantments, bool a_baseSpells, bool a_raceSpells, bool a_everyActorAbility);
502 bool CanAttackActor(Actor* a_actor);
503 bool CanFlyHere() const;
504 bool CanOfferServices() const;
505 bool CanPickpocket() const;
506 bool CanTalkToPlayer() const;
507 bool CanUseIdle(TESIdleForm* a_idle) const;
513 void DeselectSpell(SpellItem* a_spell);
516 void DoReset3D(bool a_updateWeight);
517 void EnableAI(bool a_enable);
518 void EndInterruptPackage(bool a_skipDialogue);
519 void EvaluatePackage(bool a_immediate = false, bool a_resetAI = false);
521 const TESNPC* GetActorBase() const;
522 float GetActorValueModifier(ACTOR_VALUE_MODIFIER a_modifier, ActorValue a_value) const;
523 float GetAimAngle() const;
524 float GetAimHeading() const;
528 std::uint32_t GetCollisionFilterInfo(std::uint32_t& a_outCollisionFilterInfo);
535 const TESShout* GetCurrentShout() const;
537 TESForm* GetEquippedObject(bool a_leftHand) const;
540 std::int32_t GetFactionRank(TESFaction* a_faction, bool a_isPlayer);
542 std::int32_t GetGoldAmount(bool a_noInit = false);
545 float GetHeight();
547 Actor* GetKiller() const;
548 std::uint16_t GetLevel() const;
550 bool GetMount(NiPointer<Actor>& a_outMount);
554 bool GetPlayerControls() const;
555 TESRace* GetRace() const;
556 float GetRegenDelay(ActorValue a_actorValue) const;
557 bool GetRider(NiPointer<Actor>& a_outRider);
558 [[nodiscard]] TESObjectARMO* GetSkin() const;
559 [[nodiscard]] TESObjectARMO* GetSkin(BGSBipedObjectForm::BipedObjectSlot a_slot, bool a_noInit = false);
560 [[nodiscard]] SOUL_LEVEL GetSoulSize() const;
563 float GetTrackedDamage() const;
567 float GetWarmthRating() const;
568 [[nodiscard]] TESObjectARMO* GetWornArmor(BGSBipedObjectForm::BipedObjectSlot a_slot, bool a_noInit = false);
569 [[nodiscard]] TESObjectARMO* GetWornArmor(FormID a_formID, bool a_noInit = false);
570 bool HasKeywordString(std::string_view a_formEditorID);
571 bool HasLineOfSight(TESObjectREFR* a_ref, bool& a_arg2);
572 bool HasOutfitItems(BGSOutfit* a_outfit);
573 bool HasPerk(BGSPerk* a_perk) const;
574 bool HasShout(TESShout* a_shout) const;
575 bool HasSpell(SpellItem* a_spell) const;
577 void InterruptCast(bool a_restoreMagicka) const;
578 bool IsAttacking() const;
579 bool IsAIEnabled() const;
580 bool IsAlarmed() const;
581 bool IsAMount() const;
583 bool IsAnimationDriven() const;
584 bool IsBeingRidden() const;
585 bool IsBlocking() const;
586 bool IsCasting(MagicItem* a_spell) const;
587 bool IsCombatTarget(Actor* a_other) const;
588 bool IsCommandedActor() const;
589 bool IsCurrentShout(SpellItem* a_power);
590 bool IsDoingFavor() const;
591 bool IsDualCasting() const;
592 bool IsEssential() const;
593 bool IsFactionInCrimeGroup(const TESFaction* a_faction) const;
594 bool IsGhost() const;
595 bool IsGuard() const;
596 bool IsHostileToActor(Actor* a_actor);
598 [[nodiscard]] constexpr bool IsInKillMove() const noexcept { return boolFlags.all(BOOL_FLAGS::kIsInKillMove); }
599 bool IsInMidair() const;
600 bool IsInRagdollState() const;
601 bool IsLeveled() const;
602 bool IsLimbGone(std::uint32_t a_limb);
603 bool IsMoving() const;
604 bool IsOnMount() const;
605 bool IsOverEncumbered() const;
606 bool IsPlayerTeammate() const;
607 bool IsPowerAttacking() const;
608 bool IsProtected() const;
609 bool IsRunning() const;
610 bool IsSneaking() const;
611 [[nodiscard]] bool IsSummoned() const noexcept;
612 bool IsTrespassing() const;
614 void PlayASound(BSSoundHandle& a_result, FormID a_formID, bool a_unk03, std::uint32_t a_flags);
615 void ProcessVATSAttack(MagicCaster* a_caster, bool a_hasTargetAnim, TESObjectREFR* a_target, bool a_leftHand);
617 void RemoveCastScroll(SpellItem* a_spell, MagicSystem::CastingSource a_source);
621 bool RemoveSpell(SpellItem* a_spell);
623 bool SetDefaultOutfit(BGSOutfit* a_outfit, bool a_update3D);
624 void SetHeading(float a_angle); // SetRotationZ
626 void SetLooking(float a_angle); // SetRotationX
627 void SetPlayerControls(bool a_enable);
628 bool SetSleepOutfit(BGSOutfit* a_outfit, bool a_update3D);
629 void StealAlarm(TESObjectREFR* a_ref, TESForm* a_object, std::int32_t a_num, std::int32_t a_total, TESForm* a_owner, bool a_allowWarning);
631 void StopInteractingQuick(bool a_unk02);
632 void StopMoving(float a_delta);
633 void SwitchRace(TESRace* a_race, bool a_player);
634 void TrespassAlarm(TESObjectREFR* a_ref, TESForm* a_ownership, std::int32_t a_crime);
635 void UpdateArmorAbility(TESForm* a_armor, ExtraDataList* a_extraData);
639 void UpdateRegenDelay(ActorValue a_actorValue, float a_regenDelay);
641 void UpdateWeaponAbility(TESForm* a_weapon, ExtraDataList* a_extraData, bool a_leftHand);
642 void VisitArmorAddon(TESObjectARMO* a_armor, TESObjectARMA* a_arma, std::function<void(bool a_firstPerson, NiAVObject& a_obj)> a_visitor);
643 bool VisitFactions(std::function<bool(TESFaction* a_faction, std::int8_t a_rank)> a_visitor);
645 std::uint8_t WhoIsCasting();
646 bool WouldBeStealing(const TESObjectREFR* a_target) const;
647
648 // members
649 REX::EnumSet<BOOL_BITS, std::uint32_t> boolBits; // 0E0
650 float updateTargetTimer; // 0E4
651 REX::EnumSet<ACTOR_CRITICAL_STAGE, std::uint32_t> criticalStage; // 0E8
652 std::uint32_t pad0EC; // 0EC
658 float voiceTimer; // 108
659 float underWaterTimer; // 10C
660 std::int32_t thiefCrimeStamp; // 110
661 std::int32_t actionValue; // 114
662 float timerOnAction; // 118
663 std::uint32_t unk11C; // 11C
665 float editorLocRot; // 12C
675 std::uint32_t emotionValue; // 170
676 std::uint32_t unk174; // 174
677 std::uint32_t unk178; // 178
678 std::uint32_t intimidateBribeDayStamp; // 17C
679 std::uint64_t unk180; // 180
684 std::uint32_t unk1E8; // 1E8
685 std::uint32_t pad1EC; // 1EC
686 TESRace* race; // 1F0
687 float equippedWeight; // 1F8
688 REX::EnumSet<BOOL_FLAGS, std::uint32_t> boolFlags; // 1FC
695 float lastUpdate; // 258
696 std::uint32_t lastSeenTime; // 25C
698 float armorRating; // 268
699 float armorBaseFactorSum; // 26C
700 std::int8_t soundCallBackSet; // 271
701 std::uint8_t unk271; // 270
702 std::uint8_t unk272; // 272
703 std::uint8_t unk273; // 273
704 std::uint32_t unk274; // 274
705 std::uint64_t unk278; // 278
706 std::uint64_t unk280; // 280
707 REX::W32::CRITICAL_SECTION unk288; // 288 - havok related
708
709 private:
710 void CalculateCurrentVendorFaction() const;
711 float CalcEquippedWeight();
712 TESFaction* GetCrimeFactionImpl() const;
713 };
714#ifndef SKYRIM_SUPPORT_AE
715 static_assert(sizeof(Actor) == 0x2B0);
716#else
717 static_assert(sizeof(Actor) == 0x2B8);
718#endif
719}
#define NiSmartPointer(className)
Definition NiSmartPointer.h:251
constexpr bool all(Args... a_args) const noexcept
Definition EnumSet.h:100
Definition AIProcess.h:113
Definition ActorMagicCaster.h:22
Definition ActorMover.h:8
Definition ActorState.h:93
Definition ActorValueOwner.h:8
Definition Actor.h:261
virtual BSContainer::ForEachResult Visit(SpellItem *a_spell)=0
static constexpr auto RTTI
Definition Actor.h:263
static constexpr auto VTABLE
Definition Actor.h:264
virtual ~ForEachSpellVisitor()=default
Definition Actor.h:133
bool IsCommandedActor() const
void StopInteractingQuick(bool a_unk02)
NiPoint3 editorLocCoord
Definition Actor.h:664
virtual void InitiateCannibalPackage(Actor *a_target)
void UpdateRegenDelay(ActorValue a_actorValue, float a_regenDelay)
virtual void PlayPickUpSound(TESBoundObject *a_object, bool a_pickup, bool a_use)
REX::EnumSet< BOOL_FLAGS, std::uint32_t > boolFlags
Definition Actor.h:688
virtual bool GetVampireFeed()
virtual float GetRunSpeed()
void KillImmediate()
bool IsMoving() const
virtual void Unk_C9(void)
BGSAnimationSequencer * GetSequencer(void) const override
ObjectRefHandle GetOccupiedFurniture() const
virtual void PickUpObject(TESObjectREFR *a_object, std::int32_t a_count, bool a_arg3=false, bool a_playSound=true)
bool GetRider(NiPointer< Actor > &a_outRider)
float GetActorValueModifier(ACTOR_VALUE_MODIFIER a_modifier, ActorValue a_value) const
MagicItem * selectedSpells[SlotTypes::kTotal]
Definition Actor.h:682
virtual void ProcessTracking(float a_delta, NiAVObject *a_obj3D)
std::uint8_t unk272
Definition Actor.h:702
virtual void UpdateNoAI(float a_delta)
EmotionType emotionType
Definition Actor.h:674
NiPoint3 GetBoundMin() const override
NiNode * GetFireNode() override
bool IsChild() const override
Modifiers staminaModifiers
Definition Actor.h:693
void SaveGame(BGSSaveFormBuffer *a_buf) override
void Unk_69(void) override
virtual void RemoveCrimeGoldValue(TESFaction *a_faction, bool a_violent, std::int32_t a_amount)
std::int32_t RequestDetectionLevel(Actor *a_target, DETECTION_PRIORITY a_priority=DETECTION_PRIORITY::kNormal)
bool ProcessInWater(hkpCollidable *a_collidable, float a_waterHeight, float a_deltaTime) override
BOOL_FLAGS
Definition Actor.h:193
bool ShouldPerformRevert() const override
void AddToFaction(TESFaction *a_faction, std::int8_t a_rank)
void UpdateSoundCallBack(bool a_endSceneAction) override
virtual void Unk_106(void)
virtual ActorHandle QLastRiddenMount() const
std::uint8_t WhoIsCasting()
bool HasShout(TESShout *a_shout) const
bool IsDualCasting() const
bool IsEssential() const
virtual float CalcUnarmedDamage()
NiPoint3 GetLookingAtLocation() const override
float GetTrackedDamage() const
std::uint32_t unk1E8
Definition Actor.h:684
virtual bhkCharacterController * Move(float a_arg2, const NiPoint3 &a_position)
virtual bool IsInCombat() const
AITimeStamp calculateVendorFactionTimer
Definition Actor.h:673
NiPointer< Actor > GetCommandingActor() const
BSFaceGenAnimationData * GetFaceGenAnimationData() override
virtual void WeaponSwingCallBack()
bool GetMountedBy(NiPointer< Actor > &a_outRider)
virtual void EndDialogue()
virtual bool CalculateCachedOwnerIsInCombatantFaction() const
virtual void Unk_C4(void)
virtual void SetPosition(const NiPoint3 &a_pos, bool a_updateCharController)
float GetRegenDelay(ActorValue a_actorValue) const
void MoveHavok(bool a_forceRec) override
std::int32_t thiefCrimeStamp
Definition Actor.h:660
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) override
void DispelAlteredStates(RE::EffectArchetype a_exception)
void SetFireNode(NiNode *a_fireNode) override
bool IsCurrentShout(SpellItem *a_power)
virtual void InitiateSpectator(Actor *a_target)
virtual void SetVampireFeed(bool a_set)
virtual void RemoveCharController()
virtual void Unk_C5(void)
bool RemoveSpell(SpellItem *a_spell)
bool OnAddCellPerformQueueReference(TESObjectCELL &a_cell) const override
Modifiers healthModifiers
Definition Actor.h:691
virtual ObjectRefHandle DropObject(const TESBoundObject *a_object, ExtraDataList *a_extraList, std::int32_t a_count, const NiPoint3 *a_dropLoc=0, const NiPoint3 *a_rotate=0)
virtual void OnItemEquipped(bool a_playAnim)
FIGHT_REACTION GetFactionReaction(Actor *a_other) const
void RemoveExtraArrows3D()
std::int32_t actionValue
Definition Actor.h:661
virtual void SetCannibal(bool a_set)
NiPoint3 GetStartingAngle() const override
TESPackage * GetCurrentPackage()
void Revert(BGSLoadFormBuffer *a_buf) override
bool IsTrespassing() const
void AllowPCDialogue(bool a_talk)
void AddObjectToContainer(TESBoundObject *a_object, ExtraDataList *a_extraList, std::int32_t a_count, TESObjectREFR *a_fromRefr) override
virtual void Unk_D1(void)
bool HasLineOfSight(TESObjectREFR *a_ref, bool &a_arg2)
std::int32_t GetGoldAmount(bool a_noInit=false)
bool AddAnimationGraphEventSink(BSTEventSink< BSAnimationGraphEvent > *a_sink) const
bool ShouldSaveAnimationOnSaving() const override
virtual EmotionType GetEmotionType()
void InitHavok() override
void InitiateDoNothingPackage()
std::uint32_t emotionValue
Definition Actor.h:675
virtual bool CheckCast(MagicItem *a_spell, bool a_dualCast, MagicSystem::CannotCastReason *a_reason)
virtual std::uint32_t GetEmotionValue()
virtual void GetEyeVector(NiPoint3 &a_origin, NiPoint3 &a_direction, bool a_includeCameraOffset)
virtual void RemoveTemporaryPerk(BGSPerk *a_perk)
ActorHandle currentCombatTarget
Definition Actor.h:655
virtual void StartPowerAttackCoolDown()
void SetDelete(bool a_set) override
void RemoveWeapon(BIPED_OBJECT equipIndex) override
static constexpr auto RTTI
Definition Actor.h:138
std::uint8_t unk273
Definition Actor.h:703
bool IsBeingRidden() const
virtual void InitiateGetUpPackage()
void DoMoveToHigh() override
BGSScene * GetCurrentScene() const override
float GetAimHeading() const
void UnequipItem(std::uint64_t a_arg1, TESBoundObject *a_object) override
void ClearExpressionOverride()
virtual bool IsInFaction(const TESFaction *faction) const
std::uint32_t lastSeenTime
Definition Actor.h:696
virtual void SetCrimeGoldValue(TESFaction *a_faction, bool a_violent, std::uint32_t a_amount)
void Disable() override
virtual bool ShouldRespondToActorCollision(const MovementMessageActorCollision &a_msg, const ActorHandlePtr &a_target)
virtual void Unk_B4(void)
virtual bool InitiateTresPassPackage(TrespassPackage *a_trespassPackage)
virtual void Unk_117(void)
MagicTarget * GetMagicTarget() override
std::uint32_t unk178
Definition Actor.h:677
virtual void Update(float a_delta)
virtual void Unk_123(void)
void SetHeading(float a_angle)
BGSDialogueBranch * GetExclusiveBranch() const override
void Unk_67(void) override
std::uint32_t pad1EC
Definition Actor.h:685
TESForm * GetEquippedObject(bool a_leftHand) const
bool UpdateInDialogue(DialogueResponse *a_response, bool a_unused) override
virtual void UpdateCombatControllerSettings()
float armorBaseFactorSum
Definition Actor.h:699
virtual CombatGroup * GetCombatGroup() const
void SetLooking(float a_angle)
ActorHandle CreateRefHandle()
bool IsRunning() const
BSTSmartPointer< BipedAnim > biped
Definition Actor.h:697
virtual void UnlockWord(TESWordOfPower *a_power)
ActorHandle myKiller
Definition Actor.h:656
virtual float GetWalkSpeed()
TESFaction * GetVendorFaction()
Modifiers voicePointsModifiers
Definition Actor.h:694
ObjectRefHandle dialogueItemTarget
Definition Actor.h:654
TESRace * race
Definition Actor.h:686
void SetCurrentScene(BGSScene *a_scene) override
bool GetMount(NiPointer< Actor > &a_outMount)
virtual bool MoveToHigh()
bool MagicTargetIsActor() const override
virtual bool MovetoMiddleLow()
virtual void PotentiallyFixRagdollState()
void SwitchRace(TESRace *a_race, bool a_player)
virtual void DetachArrow(const BSTSmartPointer< BipedAnim > &a_biped)
SOUL_LEVEL GetSoulSize() const
bool IsDoingFavor() const
virtual void Unk_B3(void)
static constexpr auto VTABLE
Definition Actor.h:139
bool IsProtected() const
ActorMagicCaster * magicCasters[SlotTypes::kTotal]
Definition Actor.h:681
bool CanFlyHere() const
bool Decapitate()
void TryUpdateActorLastSeenTime() override
bool CanUseIdle(TESIdleForm *a_idle) const
bool IsAttacking() const
const TESNPC * GetActorBase() const
float lastUpdate
Definition Actor.h:695
virtual bool MovetoLow()
bool SetSleepOutfit(BGSOutfit *a_outfit, bool a_update3D)
void SetExclusiveBranch(BGSDialogueBranch *a_branch) override
NiPoint3 GetBoundMax() const override
void UpdateWeaponAbility(TESForm *a_weapon, ExtraDataList *a_extraData, bool a_leftHand)
virtual void SetSpeakingDone(bool a_set)
bool GetPlayerControls() const
bool IsHostileToActor(Actor *a_actor)
virtual void DrawWeaponMagicHands(bool a_draw)
virtual void ForEachPerk(PerkEntryVisitor &a_visitor) const
bool IsAIEnabled() const
void UpdateHairColor()
void Set3D(NiAVObject *a_object, bool a_queue3DTasks=true) override
BOOL_BITS
Definition Actor.h:156
BGSDialogueBranch * exclusiveBranch
Definition Actor.h:690
void UpdateSkinColor()
TESShout * GetCurrentShout()
virtual void Unk_EA(void)
virtual void CheckTempModifiers()
float GetWarmthRating() const
virtual void Unk_C6(void)=0
virtual void ForEachPerkEntry(EntryPoint a_entryType, PerkEntryVisitor &a_visitor) const
void DoReset3D(bool a_updateWeight)
bool IsOverEncumbered() const
virtual bool QSpeakingDone() const
double GetMoveDirectionRelativeToFacing()
void Unk_68(void) override
void Unk_78(void) override
const InventoryEntryData * GetAttackingWeapon() const
bool IsOnMount() const
bool IsAngryWithPlayer() const
Definition Actor.h:582
InventoryEntryData * GetEquippedEntryData(bool a_leftHand) const
void TrespassAlarm(TESObjectREFR *a_ref, TESForm *a_ownership, std::int32_t a_crime)
HighProcessData * GetHighProcess() const
virtual void KillDying()
virtual void PayFine(TESFaction *a_faction, bool a_goToJail, bool a_removeStolenItems)
virtual void Unk_105(void)
void DoTrap2(TrapEntry *a_trap, TargetEntry *a_target) override
void Predestroy() override
TESObjectARMO * GetWornArmor(FormID a_formID, bool a_noInit=false)
virtual const BSFixedString & GetResponseString() const
bool AddWornItem(TESBoundObject *a_item, std::int32_t a_count, bool a_forceEquip, std::uint32_t a_arg4, std::uint32_t a_arg5) override
void Unk_75(void) override
virtual void SetActorStartingPosition()
void UpdateArmorAbility(TESForm *a_armor, ExtraDataList *a_extraData)
Modifiers magickaModifiers
Definition Actor.h:692
bool IsGuard() const
virtual void UpdateCharacterControllerSimulationSettings(bhkCharacterController &a_controller)
std::uint64_t unk278
Definition Actor.h:705
virtual void SetLastRiddenMount(ActorHandle a_mount)
static constexpr auto FORMTYPE
Definition Actor.h:140
void Update3DPosition(bool a_warp) override
virtual void ModifyMovementData(float a_delta, NiPoint3 &a_arg3, NiPoint3 &a_arg4)
bool AddSpell(SpellItem *a_spell)
virtual void WornArmorChanged(void)
void RemoveOutfitItems(BGSOutfit *a_outfit)
ActorValueStorage avStorage
Definition Actor.h:689
bool IsDead(bool a_notEssential=true) const override
void ProcessVATSAttack(MagicCaster *a_caster, bool a_hasTargetAnim, TESObjectREFR *a_target, bool a_leftHand)
TESNPC * GetActorBase()
void SetParentCell(TESObjectCELL *a_cell) override
virtual bool HasPerkEntries(EntryPoint a_entryType) const
const TESFaction * GetCrimeFaction() const
void SetActionComplete(bool a_set) override
void SetPlayerControls(bool a_enable)
virtual std::uint32_t UseAmmo(std::uint32_t a_shotCount)
virtual bool MoveToMiddleHigh()
virtual void GoToPrison(TESFaction *a_faction, bool a_removeInventory, bool a_realJail)
bool IsAMount() const
void UpdateAnimation(float a_delta) override
float voiceTimer
Definition Actor.h:658
virtual void HandleHealthDamage(Actor *a_attacker, float a_damage)
bool IsBlocking() const
void StopMoving(float a_delta)
std::uint32_t GetCollisionFilterInfo(std::uint32_t &a_outCollisionFilterInfo)
MagicCaster * GetMagicCaster(MagicSystem::CastingSource a_source) override
bool IsInCastPowerList(SpellItem *a_power)
void EnableAI(bool a_enable)
void DeselectSpell(SpellItem *a_spell)
REX::EnumSet< BOOL_BITS, std::uint32_t > boolBits
Definition Actor.h:649
TESFaction * vendorFaction
Definition Actor.h:672
virtual void UpdateAlpha()
bool CanTalkToPlayer() const
void AllowBleedoutDialogue(bool a_canTalk)
void ClearArrested()
bhkCharacterController * GetCharController() const
static NiPointer< Actor > LookupByHandle(RefHandle a_refHandle)
void ForceEditorLocation(BGSLocation *a_location) override
~Actor() override
virtual void SetSize(float a_size)
bool HasOutfitItems(BGSOutfit *a_outfit)
const TESPackage * GetCurrentPackage() const
TESPackage * unk150
Definition Actor.h:670
void DoTrap1(TrapData &a_data) override
std::uint32_t unk174
Definition Actor.h:676
bool HasSpell(SpellItem *a_spell) const
float armorRating
Definition Actor.h:698
virtual void AttachArrow(const BSTSmartPointer< BipedAnim > &a_biped)
virtual bool GetCannibal()
REX::W32::CRITICAL_SECTION unk288
Definition Actor.h:707
InventoryEntryData * GetAttackingWeapon()
virtual float GetArmorBaseFactorSum()
virtual float CheckClampDamageModifier(ActorValue a_av, float a_delta)
constexpr bool IsInKillMove() const noexcept
Definition Actor.h:598
virtual bool PutActorOnMountQuick()
TESRace * GetRace() const
virtual void ApplyTemporaryPerk(BGSPerk *a_perk)
virtual void CreateMovementController()
virtual void KillImpl(Actor *a_attacker, float a_damage, bool a_sendEvent, bool a_ragdollInstant)
TESObjectARMO * GetSkin(BGSBipedObjectForm::BipedObjectSlot a_slot, bool a_noInit=false)
virtual bool CalculateCachedOwnerIsNPC() const
virtual float CalcArmorRating()
bool IsSneaking() const
ActorHandle GetHandle()
virtual void ModCrimeGoldValue(TESFaction *a_faction, bool a_violent, std::int32_t a_amount)
TESNPC * GetTemplateBase()
void Unk_96(void) override
virtual void SetAlpha(float a_alpha=1.0)
void StealAlarm(TESObjectREFR *a_ref, TESForm *a_object, std::int32_t a_num, std::int32_t a_total, TESForm *a_owner, bool a_allowWarning)
bool CanPickpocket() const
std::uint8_t unk271
Definition Actor.h:701
std::int32_t GetFactionRank(TESFaction *a_faction, bool a_isPlayer)
float underWaterTimer
Definition Actor.h:659
const TESFaction * GetVendorFaction() const
Actor * GetTargetStatsObject() override
TESFaction * GetCrimeFaction()
bool IsAnimationDriven() const
void ClearExtraArrows()
Definition Actor.h:510
REX::EnumSet< ACTOR_CRITICAL_STAGE, std::uint32_t > criticalStage
Definition Actor.h:651
void RemoveCastScroll(SpellItem *a_spell, MagicSystem::CastingSource a_source)
virtual void ApplyPerksFromBase()
bool IsInRagdollState() const
bool IsSummoned() const noexcept
virtual bool CheckValidTarget(TESObjectREFR &a_target)
virtual void ServePrisonTime()
float GetTotalCarryWeight()
void SetLifeState(ACTOR_LIFE_STATE a_lifeState)
void RemoveFromFaction(TESFaction *a_faction)
void LoadGame(BGSLoadFormBuffer *a_buf) override
BSTSmallArray< SpellItem * > addedSpells
Definition Actor.h:680
std::uint32_t intimidateBribeDayStamp
Definition Actor.h:678
virtual bool IsPowerAttackCoolingDown() const
std::int8_t soundCallBackSet
Definition Actor.h:700
virtual bool IsAtPoint(const NiPoint3 &a_point, float a_radius, bool a_expandRadius, bool a_alwaysTestHeight)
AIProcess * currentProcess
Definition Actor.h:653
bool HasKeywordHelper(const BGSKeyword *a_keyword) const override
TESForm * selectedPower
Definition Actor.h:683
void TryMoveToMiddleLow() override
float GetVoiceRecoveryTime()
std::uint32_t unk274
Definition Actor.h:704
virtual float GetFastWalkSpeed()
NiAVObject * GetHeadPartObject(BGSHeadPart::HeadPartType a_type)
void VisitSpells(ForEachSpellVisitor &a_visitor)
TESObjectARMO * GetWornArmor(BGSBipedObjectForm::BipedObjectSlot a_slot, bool a_noInit=false)
void UpdateAwakeSound(NiAVObject *a_obj3D)
virtual void Resurrect(bool a_resetInventory, bool a_attach3D)
bool IsLeveled() const
void CastPermanentMagic(bool a_wornItemEnchantments, bool a_baseSpells, bool a_raceSpells, bool a_everyActorAbility)
virtual void SetRefraction(bool a_enable, float a_refraction)
virtual void RemovePerk(BGSPerk *a_perk)
CombatController * combatController
Definition Actor.h:671
bool IsLimbGone(std::uint32_t a_limb)
bool PopulateGraphProjectsToLoad(void) const override
bool DetachHavok(NiAVObject *a_obj3D) override
ActorMover * actorMover
Definition Actor.h:668
BGSLocation * editorLocation
Definition Actor.h:667
virtual void InitValues()
void FinishLoadGame(BGSLoadFormBuffer *a_buf) override
TESPackage * CheckForCurrentAliasPackage() override
void ResetInventory(bool a_leveledOnly) override
bool IsCombatTarget(Actor *a_other) const
virtual void UpdateCombat()
virtual void CreateActorMover()
NiPoint3 GetStartingLocation() const override
virtual void InitiateVampireFeedPackage(Actor *a_target, TESObjectREFR *a_furniture)
virtual bool AddShout(TESShout *a_shout)
TESForm * GetEquippedObjectInSlot(const BGSEquipSlot *slot) const
float GetEquippedWeight()
void PlayASound(BSSoundHandle &a_result, FormID a_formID, bool a_unk03, std::uint32_t a_flags)
BGSLocation * GetEditorLocation1() const override
virtual bool UpdateFeedbackGraphSpeedAndDirection(const ActorMotionFeedbackOutput &a_output)
std::uint32_t pad0EC
Definition Actor.h:652
void GetLinearVelocity(NiPoint3 &a_velocity) const override
virtual void StopCombat()
const TESShout * GetCurrentShout() const
float GetHeight()
bool IsCasting(MagicItem *a_spell) const
void InitLoadGame(BGSLoadFormBuffer *a_buf) override
float equippedWeight
Definition Actor.h:687
virtual bool ComputeMotionFeedbackSpeedAndDirection(const ActorMotionFeedbackData &a_data, float a_delta, ActorMotionFeedbackOutput &a_output)
void AddWornOutfit(BGSOutfit *a_outfit, bool a_forceUpdate)
virtual float GetAlpha()
virtual void SetEmotionType(EmotionType a_emotionType)
void InterruptCast(bool a_restoreMagicka) const
BSSimpleList< ActiveEffect * > * GetActiveEffectList() override
virtual void Unk_E9(void)
virtual void SetEmotionValue(std::uint32_t a_emotionValue)
virtual void DestroyActorMover()
float editorLocRot
Definition Actor.h:665
bool SetDefaultOutfit(BGSOutfit *a_outfit, bool a_update3D)
void RemoveAnimationGraphEventSink(BSTEventSink< BSAnimationGraphEvent > *a_sink) const
void InitItemImpl() override
void VisitArmorAddon(TESObjectARMO *a_armor, TESObjectARMA *a_arma, std::function< void(bool a_firstPerson, NiAVObject &a_obj)> a_visitor)
Actor * GetKiller() const
virtual bool CalculateCachedOwnerIsUndead() const
virtual void PutCreatedPackage(TESPackage *a_package, bool a_tempPackage, bool a_createdPackage)
virtual float GetHeading(bool a_ignoreRaceSettings) const
virtual void SetCombatGroup(CombatGroup *a_group)
virtual float GetJogSpeed()
virtual void InitiateFlee(TESObjectREFR *a_fleeRef, bool a_runOnce, bool a_knows, bool a_combatMode, TESObjectCELL *a_cell, TESObjectREFR *a_ref, float a_fleeFromDist, float a_fleeToDist)
bool IsFactionInCrimeGroup(const TESFaction *a_faction) const
NiAVObject * Load3D(bool a_arg1) override
virtual void DetachCharController()
bool GetEditorLocation2(NiPoint3 &a_outPos, NiPoint3 &a_outRot, TESForm *&a_outWorldOrCell, TESObjectCELL *a_fallback) override
void ModifyAnimationUpdateData(BSAnimationUpdateData &a_data) override
BSTSmartPointer< MovementControllerNPC > movementController
Definition Actor.h:669
virtual void SetBeenAttacked(bool a_set)
bool WouldBeStealing(const TESObjectREFR *a_target) const
void SetObjectReference(TESBoundObject *a_object) override
bool IsPlayerTeammate() const
static bool LookupByHandle(RefHandle a_refHandle, NiPointer< Actor > &a_refrOut)
virtual void UpdateFadeSettings(bhkCharacterController *a_controller)
virtual void UpdateNonRenderSafe(float a_delta)
void StopAlarmOnActor()
std::uint64_t unk280
Definition Actor.h:706
bool IsPowerAttacking() const
MiddleHighProcessData * GetMiddleHighProcess() const
float GetAimAngle() const
virtual void AddPerk(BGSPerk *a_perk, std::uint32_t a_rank=0)
TESObjectARMO * GetSkin() const
void PauseCurrentDialogue(void) override
virtual bool HasBeenAttacked() const
float updateTargetTimer
Definition Actor.h:650
float checkMyDeadBodyTimer
Definition Actor.h:657
virtual std::uint32_t GetCrimeGoldValue(const TESFaction *a_faction) const
virtual bool DrinkPotion(AlchemyItem *a_potion, ExtraDataList *a_extralist)
virtual void UpdateActor3DPosition()
void Update3DModel()
bool ShouldSaveAnimationOnUnloading() const override
void EvaluatePackage(bool a_immediate=false, bool a_resetAI=false)
void AddDeathItems()
bool CanOfferServices() const
virtual void OnArmorActorValueChanged()
virtual void Unk_A2(void)
bool TryChangeSkyCellActorsProcessLevel() override
void AddCastPower(SpellItem *a_power)
std::uint16_t GetLevel() const
virtual void SetAvoidanceDisabled(bool a_set)
void DispelWornItemEnchantments()
bool ApplyCurrent(float a_velocityTime, const hkVector4 &a_velocity) override
bool VisitFactions(std::function< bool(TESFaction *a_faction, std::int8_t a_rank)> a_visitor)
std::uint64_t unk180
Definition Actor.h:679
bool SetDialogueWithPlayer(bool a_flag, bool a_forceGreet, TESTopicInfo *a_topic) override
std::uint32_t unk11C
Definition Actor.h:663
virtual std::int32_t GetCurrentShoutLevel()
bool HasKeywordString(std::string_view a_formEditorID)
virtual Actor * SetUpTalkingActivatorActor(Actor *a_target, Actor *&a_activator)
bool CanAttackActor(Actor *a_actor)
bool IsGhost() const
float timerOnAction
Definition Actor.h:662
TESAmmo * GetCurrentAmmo() const override
TESForm * editorLocForm
Definition Actor.h:666
virtual void UseSkill(ActorValue a_av, float a_points, TESForm *a_arg3)
bool HasPerk(BGSPerk *a_perk) const
bool IsInMidair() const
bool IsAlarmed() const
virtual void PrecacheData()
virtual void InitiateDialogue(Actor *a_target, PackageLocation *a_loc1, PackageLocation *a_loc2)
void EndInterruptPackage(bool a_skipDialogue)
virtual float GetAcrobatics() const
Definition AlchemyItem.h:24
Definition BGSAnimationSequencer.h:11
Definition BGSDialogueBranch.h:10
Definition BGSEquipSlot.h:10
HeadPartType
Definition BGSHeadPart.h:34
Definition BGSKeyword.h:10
Definition BGSLoadFormBuffer.h:11
Definition BGSLocation.h:68
Definition BGSOutfit.h:11
BGSEntryPoint::ENTRY_POINT EntryPoint
Definition BGSPerkEntry.h:25
Definition BGSPerk.h:31
Definition BGSSaveFormBuffer.h:8
Definition BGSScene.h:32
Definition BSFaceGenAnimationData.h:11
Definition BSPointerHandleSmartPointer.h:10
Definition BSTList.h:10
Definition BSTArray.h:378
Definition BSTEvent.h:185
Definition BSTSmartPointer.h:37
Definition BipedAnim.h:42
Definition CombatController.h:23
Definition CombatGroup.h:70
Definition DialogueItem.h:22
Definition ExtraDataList.h:49
Definition IPostAnimationChannelUpdateFunctor.h:6
Definition InventoryEntryData.h:15
Definition MagicCaster.h:25
Definition MagicItem.h:30
Definition MagicTarget.h:25
Definition MovementControllerNPC.h:21
Definition NiAVObject.h:51
Definition NiNode.h:12
Definition NiPoint3.h:6
Definition NiSmartPointer.h:9
Definition PackageLocation.h:11
Definition PerkEntryVisitor.h:10
Definition SpellItem.h:16
Definition TESAmmo.h:50
Definition TESBoundObject.h:24
Definition TESFaction.h:120
Definition TESForm.h:36
Definition TESIdleForm.h:37
Definition TESNPC.h:36
Definition TESObjectARMA.h:28
Definition TESObjectARMO.h:37
Definition TESObjectCELL.h:115
Definition TESObjectREFR.h:114
Definition TESPackage.h:310
Definition TESRace.h:146
Definition TESShout.h:18
Definition TESTopicInfo.h:42
Definition TESWordOfPower.h:13
Definition bhkCharacterController.h:73
const_pointer data() const noexcept
Definition BSFixedString.h:116
Definition hkVector4.h:9
Definition hkpCollidable.h:13
Definition BSDirectInputManager.h:8
ForEachResult
Definition BSContainer.h:6
CannotCastReason
Definition MagicSystem.h:13
CastingSource
Definition MagicSystem.h:27
Definition AbsorbEffect.h:6
constexpr REL::ID RTTI_Actor__ForEachSpellVisitor(static_cast< std::uint64_t >(686850))
constexpr REL::ID RTTI_Actor(static_cast< std::uint64_t >(513915))
SOUL_LEVEL
Definition SoulLevels.h:6
EmotionType
Definition EmotionTypes.h:6
ActorValue
Definition ActorValues.h:6
constexpr std::array< REL::ID, 1 > VTABLE_Actor__ForEachSpellVisitor
Definition Offsets_VTABLE.h:7389
DETECTION_PRIORITY
Definition DetectionPriorities.h:6
ACTOR_LIFE_STATE
Definition ActorState.h:8
std::uint32_t FormID
Definition BSCoreTypes.h:5
constexpr std::array< REL::ID, 10 > VTABLE_Actor
Definition Offsets_VTABLE.h:7363
ITEM_REMOVE_REASON
Definition TESObjectREFR.h:65
ACTOR_CRITICAL_STAGE
Definition Actor.h:56
std::uint32_t RefHandle
Definition BSCoreTypes.h:6
FIGHT_REACTION
Definition FightReactions.h:6
Definition EffectArchetypes.h:65
ACTOR_VALUE_MODIFIER
Definition ActorValues.h:179
@ kTotal
Definition ActorValues.h:184
Definition AITimeStamp.h:6
Definition Actor.h:79
const T * operator[](ActorValue a_actorValue) const
Definition Actor.h:86
T * operator[](ActorValue a_actorValue)
Definition Actor.h:81
BSFixedString actorValues
Definition Actor.h:92
T * entries
Definition Actor.h:93
Definition Actor.h:75
LocalMap< float > baseValues
Definition Actor.h:118
LocalMap< Modifiers > modifiers
Definition Actor.h:119
Definition Actor.h:230
ChangeFlag
Definition Actor.h:232
@ kLifeState
Definition Actor.h:233
@ kMerchantContainer
Definition Actor.h:235
@ kDismemberedLimbs
Definition Actor.h:236
@ kOverrideModifiers
Definition Actor.h:241
@ kPackageExtraData
Definition Actor.h:234
@ kDispModifiers
Definition Actor.h:238
@ kPermanentModifiers
Definition Actor.h:242
@ kLeveledActor
Definition Actor.h:237
@ kTempModifiers
Definition Actor.h:239
@ kDamageModifiers
Definition Actor.h:240
Definition Actor.h:247
RecordFlag
Definition Actor.h:249
@ kInitiallyDisabled
Definition Actor.h:253
@ kPersistent
Definition Actor.h:252
@ kNoAIAcquire
Definition Actor.h:255
@ kIgnored
Definition Actor.h:254
@ kDontHavokSettle
Definition Actor.h:256
@ kStartsDead
Definition Actor.h:251
@ kDeleted
Definition Actor.h:250
Definition Actor.h:143
@ kLeftHand
Definition Actor.h:146
@ kPowerOrShout
Definition Actor.h:149
@ kUnknown
Definition Actor.h:148
@ kTotal
Definition Actor.h:151
@ kRightHand
Definition Actor.h:147
ENTRY_POINT
Definition BGSEntryPoint.h:12
BipedObjectSlot
Definition BGSBipedObjectForm.h:11
BIPED_OBJECT
Definition BipedObjects.h:8
Definition BSAnimationGraphEvent.h:10
Definition BSAnimationUpdateData.h:10
Definition BSSoundHandle.h:10
ArchetypeID
Definition EffectArchetypes.h:8
Definition HighProcessData.h:61
Definition MiddleHighProcessData.h:133
Definition Actor.h:67
float modifiers[ACTOR_VALUE_MODIFIERS::kTotal]
Definition Actor.h:70