CommonLibSSE (powerof3)
Loading...
Searching...
No Matches
Projectile.h
Go to the documentation of this file.
1#pragma once
2
4#include "RE/B/BSAtomic.h"
7#include "RE/B/BSTList.h"
8#include "RE/B/BSTSingleton.h"
10#include "RE/F/FormTypes.h"
11#include "RE/I/ImpactResults.h"
12#include "RE/N/NiSmartPointer.h"
13#include "RE/N/NiTransform.h"
14#include "RE/T/TESObjectREFR.h"
15
16namespace RE
17{
18 class bhkCollisionObject;
19 class bhkShape;
20 class bhkSimpleShapePhantom;
21 class BGSMaterialType;
22 class QueuedFile;
23 class CombatController;
24 class MagicItem;
25
27 {
28 public:
29 inline static constexpr auto RTTI = RTTI_Projectile;
30 inline static constexpr auto VTABLE = VTABLE_Projectile;
31
33 {
34 public:
35 // members
38 float wobble; // 28
39 };
40 static_assert(sizeof(WobbleControl) == 0x2C);
41
42 class Manager : public BSTSingletonSDM<Manager>
43 {
44 public:
46
47 // members
53 };
54
56 {
57 inline static constexpr auto RTTI = RTTI_Projectile__LaunchData;
58 inline static constexpr auto VTABLE = VTABLE_Projectile__LaunchData;
59
60 virtual ~LaunchData();
61
62 // members
70 float angleZ; // 48
71 float angleX; // 4C
72 void* unk50; // 50 - maps to Projectile unk110
74 float unk60; // 60 - maps to Projectile unk1A8
75 float unk64; // 64 - maps to Projectile unk1AC
79 std::uint32_t unk7C; // 7C
82 std::int32_t area; // 90
83 float power; // 94
84 float scale; // 98
85 bool alwaysHit; // 9C
87 bool autoAim; // 9E
88 bool unk9F; // 9F
89 bool useOrigin; // A0
91 bool forceConeOfFire; // A2
92 };
93 static_assert(sizeof(LaunchData) == 0xA8);
94
96 {
97 public:
98 // members
104 std::int32_t damageRootNodeType; // 30
108 std::uint16_t unk44; // 44
109 std::uint16_t unk46; // 46
110 std::uint8_t unk48; // 48
111 std::uint8_t unk49; // 49
112 };
113 static_assert(sizeof(ImpactData) == 0x50);
114
115 ~Projectile() override; // 00
116
117 // override (TESObjectREFR)
118 bool Load(TESFile* a_mod) override; // 06 - { return TESObjectREFR::Load(a_mod); }
119 void SaveGame(BGSSaveFormBuffer* a_buf) override; // 0E
120 void LoadGame(BGSLoadFormBuffer* a_buf) override; // 0F
121 void InitLoadGame(BGSLoadFormBuffer* a_buf) override; // 10
122 void FinishLoadGame(BGSLoadFormBuffer* a_buf) override; // 11
123 void Revert(BGSLoadFormBuffer* a_buf) override; // 12
124 bool GetAllowPromoteToPersistent() const override; // 47 - { return false; }
125 bool HasKeywordHelper(const BGSKeyword* a_keyword) const override; // 48
126 void SetActorCause(ActorCause* a_cause) override; // 50 - { actorCause = a_cause; }
127 ActorCause* GetActorCause() const override; // 51 - { return actorCause; }
129 bool DetachHavok(NiAVObject* a_obj3D) override; // 65
130 void InitHavok() override; // 66
131 NiAVObject* Load3D(bool a_backgroundLoading) override; // 6A
132 void Set3D(NiAVObject* a_object, bool a_queue3DTasks = true) override; // 6C
133 void MoveHavok(bool a_forceRec) override; // 85 - { return; }
134 void GetLinearVelocity(NiPoint3& a_velocity) const override; // 86
135 NiNode* GetFireNode() override; // 8B
136 Projectile* AsProjectile() override; // 8F - { return this; }
137 bool OnAddCellPerformQueueReference(TESObjectCELL& a_cell) const override; // 90 - { return false; }
138
139 // add
140 virtual bool IsMissileProjectile(); // A2 - { return 0; }
141 virtual bool IsGrenadeProjectile(); // A3 - { return 0; }
142 virtual bool IsFlameProjectile(); // A4 - { return 0; }
143 virtual bool IsBeamProjectile(); // A5 - { return 0; }
144 virtual void Unk_A6(void); // A6 - { return 0; }
145 virtual bool IsBarrierProjectile(); // A7 - { return 0; }
146 virtual void OnKill(); // A8 - { return; }
147 virtual void Process3D(); // A9 - { return; }
148 virtual void PostLoad3D(NiAVObject* a_root); // AA
149 virtual void UpdateImpl(float a_delta) = 0; // AB
150 virtual bool ProcessImpacts(); // AC
151 virtual void Update3D(); // AD
152 virtual void Unk_AE(void); // AE - { return 0; }
153 virtual float GetPowerSpeedMult() const; // AF - { if (unk158) return 1.0; else return unk188; } - "float GetSpeed()"?
154 virtual float GetWeaponSpeedMult() const; // B0 - { return 1.0; }
155 virtual bool GetStopMainSoundAfterImpact(); // B1 - { return 0; }
156 virtual void ReportHavokDeactivation(); // B2 - { return; }
157 virtual bool TurnOff(Actor* a_owner, bool a_noDeactivateSound); // B3
158 virtual bool IsPermanent() const; // B4 - { return TESDataHandler::GetSingleton()->IsGeneratedFormID(formID) == 0; }
159 virtual float GetGravity(); // B5 - { void* var = unk40; if ((var->unk80 >> 17) & 1) return 1.0; else return var->unk84; }
160 virtual void CleanUpPointersOnDisable(); // B6
161 virtual bool RunTargetPick(); // B7
162 virtual bool GetKillOnCollision(); // B8 - { return 1; }
163 virtual bool ShouldBeLimited(); // B9 - { return 0; }
164 virtual bool TargetsWholeBody(); // BA - { return 0; }
165 virtual std::uint32_t GetCollisionGroup(); // BB
166 virtual bhkShape* GetCollisionShape(); // BC
167 virtual void AddImpact(TESObjectREFR* a_ref, const NiPoint3& a_targetLoc, const NiPoint3& a_velocity, hkpCollidable* a_collidable, std::int32_t a_arg6, std::uint32_t a_arg7); // BD
168 virtual bool HandleHits(hkpCollidable* a_collidable); // BE
169 virtual void OnTriggerEnter(); // BF - { return; }
170 virtual void Handle3DLoaded(); // C0 - { return; }
171 virtual bool ShouldUseDesiredTarget(); // C1 - { return 0; }
172
173 float GetHeight() const;
174 float GetSpeed() const;
175
177
178 // members
181 float unk0DC; // 0DC
182 bhkSimpleShapePhantom* unk0E0; // 0E0 - smart ptr
183 mutable BSSpinLock unk0E8; // 0E8
186 void* unk108; // 108 - smart ptr
187 void* unk110; // 110 - smart ptr
193 std::uint32_t* unk140; // 140
198 std::uint32_t pad164; // 164
201 std::uint64_t unk178; // 178
202 std::uint64_t unk180; // 180
203 float power; // 188 - 14074B774
204 float speedMult; // 18C - 1407501B2
205 float range; // 190
206 float livingTime; // 194
207 float weaponDamage; // 198
208 float transparency; // 19C - for beam disappearing
209 std::uint64_t unk1A0; // 1A0
210 float unk1A8; // 1A8
211 float unk1AC; // 1AC
214 float distanceMoved; // 1C0
215 std::uint32_t unk1C4; // 1C4 - pad?
216 float scale; // 1C8 - for double cast model scale
217 std::uint32_t flags; // 1CC
218 std::uint64_t unk1D0; // 1D0
219 };
220#ifndef SKYRIM_SUPPORT_AE
221 static_assert(sizeof(Projectile) == 0x1D8);
222#else
223 static_assert(sizeof(Projectile) == 0x1E0);
224#endif
225}
Definition: ActorCause.h:9
Definition: Actor.h:127
Definition: AlchemyItem.h:24
Definition: BGSExplosion.h:53
Definition: BGSKeyword.h:10
Definition: BGSMaterialType.h:12
Definition: BGSProjectile.h:79
Definition: BSTList.h:10
Definition: BSAtomic.h:49
Definition: BSTArray.h:377
Definition: CombatController.h:23
Definition: EffectSetting.h:24
Definition: EnchantmentItem.h:10
Definition: InventoryEntryData.h:15
Definition: MagicCaster.h:17
Definition: MagicItem.h:27
Definition: NiAVObject.h:50
Definition: NiMatrix3.h:8
Definition: NiNode.h:12
Definition: NiPoint3.h:6
Definition: NiSmartPointer.h:9
Definition: NiTransform.h:9
Definition: Projectile.h:43
BSTArray< WobbleControl > wobble
Definition: Projectile.h:52
BSTArray< ProjectileHandle > pending
Definition: Projectile.h:50
static Manager * GetSingleton()
BSTArray< ProjectileHandle > limited
Definition: Projectile.h:49
BSTArray< ProjectileHandle > unlimited
Definition: Projectile.h:48
BSSpinLock projectileLock
Definition: Projectile.h:51
Definition: Projectile.h:27
NiPointer< ActorCause > actorCause
Definition: Projectile.h:188
BGSExplosion * explosion
Definition: Projectile.h:195
~Projectile() override
virtual void Handle3DLoaded()
virtual float GetPowerSpeedMult() const
float GetSpeed() const
ObjectRefHandle shooter
Definition: Projectile.h:189
void InitLoadGame(BGSLoadFormBuffer *a_buf) override
float livingTime
Definition: Projectile.h:206
bool GetAllowPromoteToPersistent() const override
void * unk108
Definition: Projectile.h:186
NiPointer< QueuedFile > projectileDBFiles
Definition: Projectile.h:200
void * unk110
Definition: Projectile.h:187
std::uint64_t unk1D0
Definition: Projectile.h:218
std::uint32_t flags
Definition: Projectile.h:217
ObjectRefHandle desiredTarget
Definition: Projectile.h:190
virtual bool IsBarrierProjectile()
virtual bool ShouldUseDesiredTarget()
float speedMult
Definition: Projectile.h:204
std::uint64_t unk1A0
Definition: Projectile.h:209
EffectSetting * avEffect
Definition: Projectile.h:199
void MoveHavok(bool a_forceRec) override
NiNode * GetFireNode() override
std::uint32_t * unk140
Definition: Projectile.h:193
virtual void ReportHavokDeactivation()
float range
Definition: Projectile.h:205
virtual void PostLoad3D(NiAVObject *a_root)
void LoadGame(BGSLoadFormBuffer *a_buf) override
virtual bool TargetsWholeBody()
virtual float GetWeaponSpeedMult() const
virtual void OnTriggerEnter()
NiPoint3 linearVelocity
Definition: Projectile.h:185
float distanceMoved
Definition: Projectile.h:214
std::uint64_t unk180
Definition: Projectile.h:202
void FinishLoadGame(BGSLoadFormBuffer *a_buf) override
virtual bool GetKillOnCollision()
virtual std::uint32_t GetCollisionGroup()
float weaponDamage
Definition: Projectile.h:207
virtual float GetGravity()
bool Load(TESFile *a_mod) override
virtual bool TurnOff(Actor *a_owner, bool a_noDeactivateSound)
virtual bool GetStopMainSoundAfterImpact()
void Set3D(NiAVObject *a_object, bool a_queue3DTasks=true) override
virtual void CleanUpPointersOnDisable()
float unk1A8
Definition: Projectile.h:210
NiAVObject * Load3D(bool a_backgroundLoading) override
virtual bhkShape * GetCollisionShape()
virtual bool ProcessImpacts()
static BSPointerHandle< Projectile > * Launch(BSPointerHandle< Projectile > *a_result, LaunchData &a_data) noexcept
float transparency
Definition: Projectile.h:208
virtual bool IsGrenadeProjectile()
virtual void Update3D()
std::uint32_t pad164
Definition: Projectile.h:198
virtual void Process3D()
static constexpr auto RTTI
Definition: Projectile.h:29
BSSoundHandle sndCountdown
Definition: Projectile.h:192
std::uint64_t unk178
Definition: Projectile.h:201
BSSimpleList< ImpactData * > impacts
Definition: Projectile.h:179
virtual bool IsPermanent() const
void SaveGame(BGSSaveFormBuffer *a_buf) override
virtual bool ShouldBeLimited()
virtual bool IsBeamProjectile()
virtual bool IsMissileProjectile()
NiPoint3 velocity
Definition: Projectile.h:184
virtual bool HandleHits(hkpCollidable *a_collidable)
BSSpinLock unk0E8
Definition: Projectile.h:183
bool OnAddCellPerformQueueReference(TESObjectCELL &a_cell) const override
bhkSimpleShapePhantom * unk0E0
Definition: Projectile.h:182
virtual void Unk_A6(void)
virtual void Unk_AE(void)
float GetHeight() const
virtual bool RunTargetPick()
InventoryEntryData * unk148
Definition: Projectile.h:194
static constexpr auto VTABLE
Definition: Projectile.h:30
MagicSystem::CastingSource castingSource
Definition: Projectile.h:197
void SetActorCause(ActorCause *a_cause) override
void InitHavok() override
bool DetachHavok(NiAVObject *a_obj3D) override
BSSoundHandle sndHandle
Definition: Projectile.h:191
bool HasKeywordHelper(const BGSKeyword *a_keyword) const override
TESAmmo * ammoSource
Definition: Projectile.h:213
virtual void AddImpact(TESObjectREFR *a_ref, const NiPoint3 &a_targetLoc, const NiPoint3 &a_velocity, hkpCollidable *a_collidable, std::int32_t a_arg6, std::uint32_t a_arg7)
void GetLinearVelocity(NiPoint3 &a_velocity) const override
MagicCaster * GetMagicCaster(MagicSystem::CastingSource a_source) override
Projectile * AsProjectile() override
float unk0DC
Definition: Projectile.h:181
NiTransform unk0A8
Definition: Projectile.h:180
void Revert(BGSLoadFormBuffer *a_buf) override
std::uint32_t unk1C4
Definition: Projectile.h:215
virtual void OnKill()
ActorCause * GetActorCause() const override
float unk1AC
Definition: Projectile.h:211
virtual void UpdateImpl(float a_delta)=0
TESObjectWEAP * weaponSource
Definition: Projectile.h:212
float scale
Definition: Projectile.h:216
MagicItem * spell
Definition: Projectile.h:196
float power
Definition: Projectile.h:203
virtual bool IsFlameProjectile()
Definition: TESAmmo.h:50
Definition: TESFile.h:15
Definition: TESObjectCELL.h:115
Definition: TESObjectREFR.h:110
Definition: TESObjectWEAP.h:73
Definition: bhkShape.h:10
Definition: hkpCollidable.h:13
Definition: PCH.h:217
CastingSource
Definition: MagicSystem.h:21
Definition: AbsorbEffect.h:6
constexpr std::array< REL::ID, 4 > VTABLE_Projectile
Definition: Offsets_VTABLE.h:12566
ImpactResult
Definition: ImpactResults.h:6
constexpr REL::ID RTTI_Projectile(static_cast< std::uint64_t >(514046))
constexpr REL::ID RTTI_Projectile__LaunchData(static_cast< std::uint64_t >(684852))
constexpr std::array< REL::ID, 1 > VTABLE_Projectile__LaunchData
Definition: Offsets_VTABLE.h:12568
Definition: BSSoundHandle.h:10
Definition: BSTSingleton.h:50
Definition: Projectile.h:96
stl::enumeration< COL_LAYER, std::int32_t > collidedLayer
Definition: Projectile.h:105
BGSMaterialType * material
Definition: Projectile.h:103
std::int32_t damageRootNodeType
Definition: Projectile.h:104
NiPoint3 desiredTargetLoc
Definition: Projectile.h:99
std::uint16_t unk46
Definition: Projectile.h:109
NiPointer< bhkCollisionObject > colObj
Definition: Projectile.h:102
ImpactResult impactResult
Definition: Projectile.h:107
std::uint8_t unk49
Definition: Projectile.h:111
ObjectRefHandle collidee
Definition: Projectile.h:101
std::uint8_t unk48
Definition: Projectile.h:110
NiPoint3 negativeVelocity
Definition: Projectile.h:100
NiNode * damageRootNode
Definition: Projectile.h:106
std::uint16_t unk44
Definition: Projectile.h:108
Definition: Projectile.h:56
static constexpr auto RTTI
Definition: Projectile.h:57
std::uint32_t unk7C
Definition: Projectile.h:79
EnchantmentItem * enchantItem
Definition: Projectile.h:80
MagicItem * spell
Definition: Projectile.h:77
float unk60
Definition: Projectile.h:74
TESAmmo * ammoSource
Definition: Projectile.h:69
TESObjectREFR * desiredTarget
Definition: Projectile.h:73
float unk64
Definition: Projectile.h:75
BGSProjectile * projectileBase
Definition: Projectile.h:65
NiPoint3 origin
Definition: Projectile.h:63
bool noDamageOutsideCombat
Definition: Projectile.h:86
std::int32_t area
Definition: Projectile.h:82
void * unk50
Definition: Projectile.h:72
bool useOrigin
Definition: Projectile.h:89
TESObjectWEAP * weaponSource
Definition: Projectile.h:68
NiPoint3 contactNormal
Definition: Projectile.h:64
float angleZ
Definition: Projectile.h:70
float power
Definition: Projectile.h:83
TESObjectREFR * shooter
Definition: Projectile.h:66
float scale
Definition: Projectile.h:84
MagicSystem::CastingSource castingSource
Definition: Projectile.h:78
float angleX
Definition: Projectile.h:71
CombatController * combatController
Definition: Projectile.h:67
bool alwaysHit
Definition: Projectile.h:85
bool forceConeOfFire
Definition: Projectile.h:91
static constexpr auto VTABLE
Definition: Projectile.h:58
bool deferInitialization
Definition: Projectile.h:90
bool unk9F
Definition: Projectile.h:88
TESObjectCELL * parentCell
Definition: Projectile.h:76
bool autoAim
Definition: Projectile.h:87
AlchemyItem * poison
Definition: Projectile.h:81
Definition: Projectile.h:33
NiMatrix3 unk00
Definition: Projectile.h:36
float wobble
Definition: Projectile.h:38
ProjectileHandle handle
Definition: Projectile.h:37