CommonLibSSE (powerof3)
Loading...
Searching...
No Matches
TESObjectWEAP.h
Go to the documentation of this file.
1#pragma once
2
3#include "RE/A/ActorValues.h"
6#include "RE/B/BGSEquipType.h"
10#include "RE/B/BGSPreloadable.h"
11#include "RE/F/FormTypes.h"
12#include "RE/S/SoundLevels.h"
14#include "RE/T/TESBoundObject.h"
15#include "RE/T/TESDescription.h"
17#include "RE/T/TESFullName.h"
18#include "RE/T/TESIcon.h"
19#include "RE/T/TESModel.h"
21#include "RE/T/TESValueForm.h"
22#include "RE/T/TESWeightForm.h"
23
24namespace RE
25{
27 {
28 kNormal = 0,
30 kExplodeOnly = 2,
32 };
33
35 {
36 kConstant = 0,
40 };
41
42 enum class WEAPON_TYPE
43 {
45 kOneHandSword = 1,
47 kOneHandAxe = 3,
48 kOneHandMace = 4,
49 kTwoHandSword = 5,
50 kTwoHandAxe = 6,
51 kBow = 7,
52 kStaff = 8,
53 kCrossbow = 9
54 };
55
57 public TESBoundObject, // 000
58 public TESFullName, // 030
59 public TESModelTextureSwap, // 040
60 public TESIcon, // 078
61 public TESEnchantableForm, // 088
62 public TESValueForm, // 0A0
63 public TESWeightForm, // 0B0
64 public TESAttackDamageForm, // 0C0
65 public BGSDestructibleObjectForm, // 0D0
66 public BGSEquipType, // 0E0
67 public BGSPreloadable, // 0F0
68 public BGSMessageIcon, // 0F8
69 public BGSPickupPutdownSounds, // 110
70 public BGSBlockBashData, // 128
71 public BGSKeywordForm, // 140
72 public TESDescription // 158
73 {
74 public:
75 inline static constexpr auto RTTI = RTTI_TESObjectWEAP;
76 inline static constexpr auto VTABLE = VTABLE_TESObjectWEAP;
77 inline static constexpr auto FORMTYPE = FormType::Weapon;
78
80 {
81 enum RecordFlag : std::uint32_t
82 {
83 kNonPlayable = 1 << 2,
84 kDeleted = 1 << 5,
85 kIgnored = 1 << 12
86 };
87 };
88
90 {
91 public:
92 // members
93 float sightFOV; // 00
94 float unk04; // 04
99 std::int8_t numProjectiles; // 18
100 std::uint8_t pad19; // 19
101 std::uint16_t pad1A; // 1A
102 };
103 static_assert(sizeof(RangedData) == 0x1C);
104
105 struct Data // DNAM
106 {
107 public:
108 enum class Flag2
109 {
110 kNone = 0,
111 kPlayerOnly = 1 << 0,
112 kNPCsUseAmmo = 1 << 1,
113 kNoJamAfterReload = 1 << 2, // unused
114 kMinorCrime = 1 << 4,
115 kRangeFixed = 1 << 5,
116 kNotUsedInNormalCombat = 1 << 6,
117 kDontUse3rdPersonISAnim = 1 << 8, // unused
118 kBurstShot = 1 << 9,
119 kRumbleAlternate = 1 << 10,
120 kLongBursts = 1 << 11,
121 kNonHostile = 1 << 12,
122 kBoundWeapon = 1 << 13
123 };
124
126 {
127 kAttackLeft = 26,
128 kAttackRight = 32,
129 kAttack3 = 38,
130 kAttack4 = 44,
131 kAttack5 = 50,
132 kAttack7 = 62,
133 kAttack8 = 68,
134 kAttackLoop = 74,
135 kAttackSpin = 80,
136 kAttackSpin2 = 86,
137 kPlaceMine = 97,
138 kPlaceMine2 = 103,
139 kAttackThrow = 109,
140 kAttackThrow2 = 115,
141 kAttackThrow3 = 121,
142 kAttackThrow4 = 127,
143 kAttackThrow5 = 133,
144 kDefault = 255
145 };
146
147 enum class Flag
148 {
149 kNone = 0,
151 kAutomatic = 1 << 1, // unused
152 kHasScope = 1 << 2, // unused
153 kCantDrop = 1 << 3,
154 kHideBackpack = 1 << 4, // unused
155 kEmbeddedWeapon = 1 << 5, // unused
156 kDontUseFirstPersonISAnim = 1 << 6, // unused
157 kNonPlayable = 1 << 7
158 };
159
160 // members
162 float speed; // 08
163 float reach; // 0C
164 float minRange; // 10
165 float maxRange; // 14
167 float unk1C; // 1C
168 float staggerValue; // 20
173 std::uint8_t baseVATSToHitChance; // 32
178 std::uint8_t unk37; // 37
179 };
180 static_assert(sizeof(Data) == 0x38);
181
182 struct CriticalData // CRDT
183 {
184 public:
185 enum Flag
186 {
187 kNone = 0,
188 kOnDeath = 1 << 0
189 };
190
191 // members
192 float prcntMult; // 00
193 std::uint32_t pad04; // 04
195 std::uint16_t damage; // 10
197 std::uint8_t pad13; // 13
198 std::uint32_t pad14; // 14
199 };
200 static_assert(sizeof(CriticalData) == 0x18);
201
202 struct Unk1B8
203 {
204 public:
205 // members
208 };
209 static_assert(sizeof(Unk1B8) == 0x30);
210
211 ~TESObjectWEAP() override; // 00
212
213 // override (TESBoundObject)
214 void InitializeData() override; // 04
215 void ClearData() override; // 05
216 bool Load(TESFile* a_mod) override; // 06
217 void SaveGame(BGSSaveFormBuffer* a_buf) override; // 0E
218 void LoadGame(BGSLoadFormBuffer* a_buf) override; // 0F
219 void InitItemImpl() override; // 13
220 TESFile* GetDescriptionOwnerFile() const override; // 14
221 bool GetPlayable() const override; // 19 - { return ~((data.flags >> 7) & 1); }
222 const char* GetObjectTypeName() const override; // 39 - { return g_animationStrings[data.animationType]; }
223
224 // override (BGSKeywordForm)
225 [[nodiscard]] BGSKeyword* GetDefaultKeyword() const override; // 05
226
227 [[nodiscard]] float GetSpeed() const;
228 [[nodiscard]] float GetReach() const;
229 [[nodiscard]] float GetStagger() const;
230 [[nodiscard]] float GetMinRange() const;
231 [[nodiscard]] float GetMaxRange() const;
232 [[nodiscard]] std::uint16_t GetCritDamage() const;
233 void GetNodeName(char* a_dstBuff) const;
234 [[nodiscard]] WEAPON_TYPE GetWeaponType() const;
235 [[nodiscard]] bool IsBound() const;
236 [[nodiscard]] bool IsMelee() const;
237 [[nodiscard]] bool IsRanged() const;
238 [[nodiscard]] bool IsHandToHandMelee() const;
239 [[nodiscard]] bool IsOneHandedSword() const;
240 [[nodiscard]] bool IsOneHandedDagger() const;
241 [[nodiscard]] bool IsOneHandedAxe() const;
242 [[nodiscard]] bool IsOneHandedMace() const;
243 [[nodiscard]] bool IsTwoHandedSword() const;
244 [[nodiscard]] bool IsTwoHandedAxe() const;
245 [[nodiscard]] bool IsBow() const;
246 [[nodiscard]] bool IsStaff() const;
247 [[nodiscard]] bool IsCrossbow() const;
248
249 // members
250 Data weaponData; // 168 - DNAM
252 Unk1B8* unk1B8; // 1B8
265 std::uint32_t pad21C; // 21C
266 };
267 static_assert(sizeof(TESObjectWEAP) == 0x220);
268}
Definition: BGSBlockBashData.h:9
Definition: BGSDestructibleObjectForm.h:61
Definition: BGSEquipType.h:9
Definition: BGSImpactDataSet.h:13
Definition: BGSKeywordForm.h:12
Definition: BGSKeyword.h:10
Definition: BGSMessageIcon.h:9
Definition: BGSPickupPutdownSounds.h:10
Definition: BGSPreloadable.h:8
Definition: BGSSoundDescriptorForm.h:14
Definition: SpellItem.h:16
Definition: TESAttackDamageForm.h:8
Definition: TESBoundObject.h:24
Definition: TESDescription.h:12
Definition: TESEffectShader.h:182
Definition: TESEnchantableForm.h:11
Definition: TESFile.h:15
Definition: TESFullName.h:9
Definition: TESIcon.h:8
Definition: TESModel.h:16
Definition: TESModelTextureSwap.h:10
Definition: TESObjectSTAT.h:30
Definition: TESObjectWEAP.h:73
void InitItemImpl() override
stl::enumeration< SOUND_LEVEL, std::uint32_t > soundLevel
Definition: TESObjectWEAP.h:264
bool IsRanged() const
bool IsOneHandedDagger() const
static constexpr auto RTTI
Definition: TESObjectWEAP.h:75
std::uint32_t pad21C
Definition: TESObjectWEAP.h:265
void GetNodeName(char *a_dstBuff) const
bool IsBow() const
BGSSoundDescriptorForm * attackSound2D
Definition: TESObjectWEAP.h:254
CriticalData criticalData
Definition: TESObjectWEAP.h:251
void LoadGame(BGSLoadFormBuffer *a_buf) override
bool Load(TESFile *a_mod) override
TESObjectSTAT * firstPersonModelObject
Definition: TESObjectWEAP.h:261
bool IsCrossbow() const
BGSSoundDescriptorForm * attackSound
Definition: TESObjectWEAP.h:253
bool IsHandToHandMelee() const
float GetMaxRange() const
float GetSpeed() const
~TESObjectWEAP() override
static constexpr auto FORMTYPE
Definition: TESObjectWEAP.h:77
void InitializeData() override
BGSSoundDescriptorForm * equipSound
Definition: TESObjectWEAP.h:258
bool IsStaff() const
float GetReach() const
BGSKeyword * GetDefaultKeyword() const override
BSFixedString embeddedNode
Definition: TESObjectWEAP.h:263
Unk1B8 * unk1B8
Definition: TESObjectWEAP.h:252
bool IsOneHandedSword() const
bool IsTwoHandedAxe() const
BGSImpactDataSet * impactDataSet
Definition: TESObjectWEAP.h:260
bool IsOneHandedMace() const
bool IsOneHandedAxe() const
bool IsMelee() const
static constexpr auto VTABLE
Definition: TESObjectWEAP.h:76
TESObjectWEAP * templateWeapon
Definition: TESObjectWEAP.h:262
Data weaponData
Definition: TESObjectWEAP.h:250
const char * GetObjectTypeName() const override
float GetMinRange() const
void SaveGame(BGSSaveFormBuffer *a_buf) override
BGSSoundDescriptorForm * attackLoopSound
Definition: TESObjectWEAP.h:255
TESFile * GetDescriptionOwnerFile() const override
BGSSoundDescriptorForm * attackFailSound
Definition: TESObjectWEAP.h:256
BGSSoundDescriptorForm * idleSound
Definition: TESObjectWEAP.h:257
WEAPON_TYPE GetWeaponType() const
float GetStagger() const
std::uint16_t GetCritDamage() const
bool IsTwoHandedSword() const
bool GetPlayable() const override
BGSSoundDescriptorForm * unequipSound
Definition: TESObjectWEAP.h:259
bool IsBound() const
void ClearData() override
Definition: TESValueForm.h:8
Definition: TESWeightForm.h:8
Definition: PCH.h:217
Definition: AbsorbEffect.h:6
WEAPON_RUMBLE_PATTERN
Definition: TESObjectWEAP.h:35
WEAPONHITBEHAVIOR
Definition: TESObjectWEAP.h:27
constexpr std::array< REL::ID, 16 > VTABLE_TESObjectWEAP
Definition: Offsets_VTABLE.h:12874
constexpr REL::ID RTTI_TESObjectWEAP(static_cast< std::uint64_t >(513916))
WEAPON_TYPE
Definition: TESObjectWEAP.h:43
Definition: TESObjectWEAP.h:183
std::uint16_t damage
Definition: TESObjectWEAP.h:195
Flag
Definition: TESObjectWEAP.h:186
@ kOnDeath
Definition: TESObjectWEAP.h:188
@ kNone
Definition: TESObjectWEAP.h:187
std::uint32_t pad04
Definition: TESObjectWEAP.h:193
float prcntMult
Definition: TESObjectWEAP.h:192
SpellItem * effect
Definition: TESObjectWEAP.h:194
stl::enumeration< Flag, std::uint8_t > flags
Definition: TESObjectWEAP.h:196
std::uint8_t pad13
Definition: TESObjectWEAP.h:197
std::uint32_t pad14
Definition: TESObjectWEAP.h:198
Definition: TESObjectWEAP.h:106
float minRange
Definition: TESObjectWEAP.h:164
float animationAttackMult
Definition: TESObjectWEAP.h:166
RangedData * rangedData
Definition: TESObjectWEAP.h:161
stl::enumeration< ActorValue, std::uint32_t > resistance
Definition: TESObjectWEAP.h:171
float staggerValue
Definition: TESObjectWEAP.h:168
std::uint8_t unk37
Definition: TESObjectWEAP.h:178
float maxRange
Definition: TESObjectWEAP.h:165
Flag
Definition: TESObjectWEAP.h:148
stl::enumeration< AttackAnimation, std::uint8_t > attackAnimation
Definition: TESObjectWEAP.h:174
stl::enumeration< Flag2, std::uint16_t > flags2
Definition: TESObjectWEAP.h:172
Flag2
Definition: TESObjectWEAP.h:109
stl::enumeration< WEAPONHITBEHAVIOR, std::uint32_t > hitBehavior
Definition: TESObjectWEAP.h:169
std::uint8_t baseVATSToHitChance
Definition: TESObjectWEAP.h:173
stl::enumeration< Flag, std::uint8_t > flags
Definition: TESObjectWEAP.h:177
float reach
Definition: TESObjectWEAP.h:163
stl::enumeration< ActorValue, std::uint8_t > embeddedWeaponAV
Definition: TESObjectWEAP.h:175
float speed
Definition: TESObjectWEAP.h:162
stl::enumeration< WEAPON_TYPE, std::uint8_t > animationType
Definition: TESObjectWEAP.h:176
stl::enumeration< ActorValue, std::uint32_t > skill
Definition: TESObjectWEAP.h:170
float unk1C
Definition: TESObjectWEAP.h:167
AttackAnimation
Definition: TESObjectWEAP.h:126
Definition: TESObjectWEAP.h:90
float sightFOV
Definition: TESObjectWEAP.h:93
std::int8_t numProjectiles
Definition: TESObjectWEAP.h:99
std::uint8_t pad19
Definition: TESObjectWEAP.h:100
stl::enumeration< WEAPON_RUMBLE_PATTERN, std::uint32_t > rumblePattern
Definition: TESObjectWEAP.h:98
float firingRumbleRightMotorStrength
Definition: TESObjectWEAP.h:96
float firingRumbleDuration
Definition: TESObjectWEAP.h:97
std::uint16_t pad1A
Definition: TESObjectWEAP.h:101
float firingRumbleLeftMotorStrength
Definition: TESObjectWEAP.h:95
float unk04
Definition: TESObjectWEAP.h:94
Definition: TESObjectWEAP.h:80
RecordFlag
Definition: TESObjectWEAP.h:82
@ kIgnored
Definition: TESObjectWEAP.h:85
@ kDeleted
Definition: TESObjectWEAP.h:84
@ kNonPlayable
Definition: TESObjectWEAP.h:83
Definition: TESObjectWEAP.h:203
TESEffectShader * unk28
Definition: TESObjectWEAP.h:207
TESModel unk00
Definition: TESObjectWEAP.h:206