CommonLibSSE NG
Loading...
Searching...
No Matches
TESQuest.h
Go to the documentation of this file.
1#pragma once
2
4#include "RE/B/BSAtomic.h"
6#include "RE/B/BSString.h"
7#include "RE/B/BSTArray.h"
8#include "RE/B/BSTHashMap.h"
9#include "RE/B/BSTList.h"
10#include "RE/D/DialogueTypes.h"
11#include "RE/F/FormTypes.h"
12#include "RE/Q/QuestEvents.h"
14#include "RE/T/TESCondition.h"
15#include "RE/T/TESFullName.h"
16
17namespace RE
18{
19 class BGSBaseAlias;
20 class QueuedPromoteQuestTask;
21
22 enum class QuestFlag
23 {
24 kStopStart = static_cast<std::underlying_type_t<QuestFlag>>(-1),
25 kNone = 0,
26 kEnabled = 1 << 0,
27 kCompleted = 1 << 1,
28 kAddIdleToHello = 1 << 2,
29 kAllowRepeatStages = 1 << 3,
30 kStartsEnabled = 1 << 4,
31 kDisplayedInHUD = 1 << 5,
32 kFailed = 1 << 6,
33 kStageWait = 1 << 7,
34 kRunOnce = 1 << 8,
35 kExcludeFromExport = 1 << 9,
36 kWarnOnAliasFillFailure = 1 << 10,
37 kActive = 1 << 11,
38 kRepeatsConditions = 1 << 12,
39 kKeepInstance = 1 << 13,
40 kWantDormant = 1 << 14,
41 kHasDialogueData = 1 << 15
42 };
43
45 {
46 kNone = 0,
47 kORWithPrevious = 1 << 0,
48 kNoStatsTracking = 1 << 1
49 };
50
52 {
53 public:
55 {
56 public:
57 // members
58 std::uint32_t aliasID; // 0
59 std::uint32_t fullNameFormID; // 4
60 };
61 static_assert(sizeof(StringData) == 0x8);
62
64 {
65 public:
66 // members
67 const TESGlobal* global; // 00
68 float value; // 08
69 std::uint32_t pad0C; // 0C
70 };
71 static_assert(sizeof(GlobalValueData) == 0x10);
72
73 // members
74 std::uint32_t id; // 00
75 std::uint32_t pad04; // 04
78 std::uint16_t journalStage; // 38
79 std::int8_t journalStageItem; // 3A
80 std::uint8_t pad3B; // 3B
81 std::uint32_t pad3C; // 3C
82 };
83 static_assert(sizeof(BGSQuestInstanceText) == 0x40);
84
85 struct QUEST_DATA // DNAM
86 {
87 public:
88 enum class Type
89 {
90 kNone = 0,
91 kMainQuest = 1,
92 kMagesGuild = 2,
93 kThievesGuild = 3,
97 kDaedric = 7,
98 kSideQuest = 8,
99 kCivilWar = 9,
100 kDLC01_Vampire = 10,
102 };
103
104 // members
105 float questDelayTime; // 0
107 std::int8_t priority; // 6
109 };
110 static_assert(sizeof(QUEST_DATA) == 0x8);
111
113 {
114 public:
115 enum class Flag
116 {
117 kNone = 0,
118 kStartUpStage = 1 << 1,
119 kShutDownStage = 1 << 2,
121 };
122
123 // members
124 std::uint16_t index; // 0
126 std::uint8_t pad3; // 3
127 std::uint32_t pad4; // 4
128 };
129 static_assert(sizeof(QUEST_STAGE_DATA) == 0x8);
130
132 {
133 public:
134 explicit operator bool() const;
135
136 // members
138 };
139 static_assert(sizeof(TESQuestStage) == 0x8);
140
141 class TESQuestTarget // QSTA
142 {
143 public:
144 enum class Flag
145 {
146 kNone = 0,
148 };
149
150 // members
151 std::uint64_t unk00; // 00
153 std::uint8_t alias; // 10
154 std::uint8_t unk11; // 11
155 std::uint16_t unk12; // 12
156 std::uint32_t unk14; // 14
157 };
158 static_assert(sizeof(TESQuestTarget) == 0x18);
159
161 {
162 public:
163 // members
166 TESQuestTarget** targets; // 10 - QSTA
167 std::uint32_t numTargets; // 18
168 std::uint16_t index; // 1C - QOBJ
169 bool initialized; // 1E
172 std::uint32_t pad24; // 24
173 };
174 static_assert(sizeof(BGSQuestObjective) == 0x28);
175
177 {
178 public:
179 // members
180 std::uint32_t id; // 00
181 std::uint32_t index; // 04
182 std::uint64_t members[6]; // 08
183 };
184 static_assert(sizeof(BGSStoryEvent) == 0x38);
185
186 class TESQuest :
187 public BGSStoryManagerTreeForm, // 000
188 public TESFullName // 028
189 {
190 public:
191 inline static constexpr auto RTTI = RTTI_TESQuest;
192 inline static constexpr auto VTABLE = VTABLE_TESQuest;
193
195 inline static constexpr auto FORMTYPE = FormType::Quest;
196
198 {
199 enum ChangeFlag : std::uint32_t
200 {
201 kQuestFlags = 1 << 1,
207 kQuestScript = 1 << 30,
208 kQuestStages = (std::uint32_t)1 << 31
209 };
210 };
211
213 {
214 enum RecordFlag : std::uint32_t
215 {
216 kDeleted = 1 << 5,
217 kIgnored = 1 << 12
218 };
219 };
220
221 ~TESQuest() override; // 00
222
223 // override (BGSStoryManagerTreeForm)
224 void InitializeData() override; // 04
225 void ClearData() override; // 05
226 bool Load(TESFile* a_mod) override; // 06
227 void SaveGame(BGSSaveFormBuffer* a_buf) override; // 0E
228 void LoadGame(BGSLoadFormBuffer* a_buf) override; // 0F
229 void FinishLoadGame(BGSLoadFormBuffer* a_buf) override; // 11
230 void Revert(BGSLoadFormBuffer* a_buf) override; // 12
231 void InitItemImpl() override; // 13
232 const char* GetFormEditorID() const override; // 32 - { return formEditorID.c_str(); }
233 bool SetFormEditorID(const char* a_str) override; // 33
234 TESCondition* QConditions() override; // 3D - { return &objConditions; }
236
237 ObjectRefHandle& CreateRefHandleByAliasID(ObjectRefHandle& a_handle, std::uint32_t a_aliasID);
238 bool EnsureQuestStarted(bool& a_result, bool a_startNow);
239 std::uint16_t GetCurrentStageID() const;
240 [[nodiscard]] constexpr QUEST_DATA::Type GetType() const noexcept { return data.questType.get(); }
241 [[nodiscard]] bool IsActive() const;
242 [[nodiscard]] bool IsCompleted() const;
243 [[nodiscard]] bool IsEnabled() const;
244 [[nodiscard]] bool IsRunning() const;
245 [[nodiscard]] bool IsStarting() const;
246 [[nodiscard]] bool IsStopped() const;
247 [[nodiscard]] bool IsStopping() const;
248 void Reset();
250 void SetEnabled(bool a_set);
251 bool Start();
252 [[nodiscard]] bool StartsEnabled() const;
253 void Stop();
254
255 // members
257 std::uint32_t currentInstanceID; // 050
258 std::uint32_t pad054; // 054
261 BSTHashMap<UnkKey, UnkValue> unk0A0; // 0A0 - alias related
263 QUEST_DATA data; // 0D8 - DNAM
264 QuestEvent eventID; // 0E0 - ENAM
265 std::uint32_t pad0E4; // 0E4
272 BSTArray<TESTopic*> topics[DT::kTotal - DT::kBranchedTotal]; // 178
275 std::uint16_t currentStage; // 228
276 bool alreadyRun; // 22A
277 std::uint8_t pad22B; // 22B
278 std::uint32_t pad22C; // 22C
283 };
284 static_assert(sizeof(TESQuest) == 0x268);
285}
Definition BGSLoadFormBuffer.h:11
Definition TESQuest.h:161
std::uint32_t pad24
Definition TESQuest.h:172
TESQuestTarget ** targets
Definition TESQuest.h:166
bool initialized
Definition TESQuest.h:169
TESQuest * ownerQuest
Definition TESQuest.h:165
stl::enumeration< QUEST_OBJECTIVE_FLAGS, std::uint32_t > flags
Definition TESQuest.h:171
std::uint32_t numTargets
Definition TESQuest.h:167
stl::enumeration< QUEST_OBJECTIVE_STATE, std::uint8_t > state
Definition TESQuest.h:170
std::uint16_t index
Definition TESQuest.h:168
BSFixedString displayText
Definition TESQuest.h:164
Definition TESQuest.h:177
std::uint32_t id
Definition TESQuest.h:180
std::uint64_t members[6]
Definition TESQuest.h:182
std::uint32_t index
Definition TESQuest.h:181
Definition BGSStoryManagerTreeForm.h:44
Definition BGSStoryManagerTreeForm.h:16
VisitControl
Definition BGSStoryManagerTreeForm.h:21
Definition BSAtomic.h:69
Definition BSTList.h:10
Definition BSTArray.h:377
Definition BSTHashMap.h:21
Definition NiSmartPointer.h:9
Definition TESCondition.h:987
Definition TESFile.h:15
Definition TESFullName.h:9
Definition TESGlobal.h:10
Definition TESQuest.h:189
std::uint16_t currentStage
Definition TESQuest.h:275
void InitItemImpl() override
BSTArray< TESGlobal * > * textGlobals
Definition TESQuest.h:274
std::uint32_t pad054
Definition TESQuest.h:258
BSTArray< BGSBaseAlias * > aliases
Definition TESQuest.h:259
BGSStoryManagerTreeVisitor::VisitControl AcceptVisitor(BGSStoryManagerTreeVisitor &a_visitor) override
void InitializeData() override
BSTArray< BGSScene * > scenes
Definition TESQuest.h:273
BSSimpleList< BGSQuestObjective * > objectives
Definition TESQuest.h:268
BSTHashMap< std::uint32_t, ObjectRefHandle > refAliasMap
Definition TESQuest.h:260
void SetEnabled(bool a_set)
BSTHashMap< UnkKey, UnkValue > unk0A0
Definition TESQuest.h:261
bool IsCompleted() const
std::uint32_t pad0E4
Definition TESQuest.h:265
bool IsEnabled() const
constexpr QUEST_DATA::Type GetType() const noexcept
Definition TESQuest.h:240
BSSimpleList< TESQuestStage * > * waitingStages
Definition TESQuest.h:267
~TESQuest() override
bool SetFormEditorID(const char *a_str) override
bool alreadyRun
Definition TESQuest.h:276
bool IsStarting() const
BSTHashMap< BGSDialogueBranch *, BSTArray< TESTopic * > * > branchedDialogue[DT::kBranchedTotal]
Definition TESQuest.h:271
void FinishLoadGame(BGSLoadFormBuffer *a_buf) override
void LoadGame(BGSLoadFormBuffer *a_buf) override
BSReadWriteLock aliasAccessLock
Definition TESQuest.h:262
ObjectRefHandle & CreateRefHandleByAliasID(ObjectRefHandle &a_handle, std::uint32_t a_aliasID)
void ResetAndUpdate()
std::uint16_t GetCurrentStageID() const
BSSimpleList< TESQuestStage > * executedStages
Definition TESQuest.h:266
void ClearData() override
bool StartsEnabled() const
QUEST_DATA data
Definition TESQuest.h:263
bool IsStopped() const
static constexpr auto FORMTYPE
Definition TESQuest.h:195
std::uint32_t pad22C
Definition TESQuest.h:278
const BGSStoryEvent * startEventData
Definition TESQuest.h:280
BSTArray< BGSQuestInstanceText * > instanceData
Definition TESQuest.h:256
bool IsActive() const
bool EnsureQuestStarted(bool &a_result, bool a_startNow)
void SaveGame(BGSSaveFormBuffer *a_buf) override
bool Load(TESFile *a_mod) override
TESCondition objConditions
Definition TESQuest.h:269
const char * GetFormEditorID() const override
TESCondition storyManagerConditions
Definition TESQuest.h:270
static constexpr auto RTTI
Definition TESQuest.h:191
bool IsStopping() const
NiPointer< QueuedPromoteQuestTask > promoteTask
Definition TESQuest.h:281
BSString formEditorID
Definition TESQuest.h:279
void Revert(BGSLoadFormBuffer *a_buf) override
TESCondition * QConditions() override
BSTArray< ObjectRefHandle > promotedRefs
Definition TESQuest.h:282
bool IsRunning() const
QuestEvent eventID
Definition TESQuest.h:264
std::uint8_t pad22B
Definition TESQuest.h:277
std::uint32_t currentInstanceID
Definition TESQuest.h:257
static constexpr auto VTABLE
Definition TESQuest.h:192
BSTArray< TESTopic * > topics[DT::kTotal - DT::kBranchedTotal]
Definition TESQuest.h:272
Definition TESQuest.h:132
QUEST_STAGE_DATA data
Definition TESQuest.h:137
Definition TESQuest.h:142
Flag
Definition TESQuest.h:145
std::uint32_t unk14
Definition TESQuest.h:156
std::uint64_t unk00
Definition TESQuest.h:151
std::uint16_t unk12
Definition TESQuest.h:155
TESCondition conditions
Definition TESQuest.h:152
std::uint8_t unk11
Definition TESQuest.h:154
std::uint8_t alias
Definition TESQuest.h:153
Definition PCH.h:223
constexpr enum_type get() const noexcept
Definition PCH.h:269
Definition AbsorbEffect.h:6
QuestEvent
Definition QuestEvents.h:6
constexpr REL::VariantID RTTI_TESQuest(513910, 392448, 0x1ed9858)
DIALOGUE_TYPES::DIALOGUE_TYPE DIALOGUE_TYPE
Definition DialogueTypes.h:24
QuestFlag
Definition TESQuest.h:23
constexpr std::array< REL::VariantID, 2 > VTABLE_TESQuest
Definition Offsets_VTABLE.h:937
QUEST_OBJECTIVE_FLAGS
Definition TESQuest.h:45
const TESGlobal * global
Definition TESQuest.h:67
std::uint32_t pad0C
Definition TESQuest.h:69
float value
Definition TESQuest.h:68
Definition TESQuest.h:55
std::uint32_t aliasID
Definition TESQuest.h:58
std::uint32_t fullNameFormID
Definition TESQuest.h:59
Definition TESQuest.h:52
std::int8_t journalStageItem
Definition TESQuest.h:79
std::uint32_t id
Definition TESQuest.h:74
std::uint16_t journalStage
Definition TESQuest.h:78
BSTArray< StringData > stringData
Definition TESQuest.h:76
std::uint32_t pad04
Definition TESQuest.h:75
std::uint32_t pad3C
Definition TESQuest.h:81
std::uint8_t pad3B
Definition TESQuest.h:80
BSTArray< GlobalValueData > valueData
Definition TESQuest.h:77
DIALOGUE_TYPE
Definition DialogueTypes.h:8
Definition TESQuest.h:86
float questDelayTime
Definition TESQuest.h:105
Type
Definition TESQuest.h:89
stl::enumeration< Type, std::uint8_t > questType
Definition TESQuest.h:108
stl::enumeration< QuestFlag, std::uint16_t > flags
Definition TESQuest.h:106
std::int8_t priority
Definition TESQuest.h:107
Definition TESQuest.h:113
std::uint8_t pad3
Definition TESQuest.h:126
std::uint32_t pad4
Definition TESQuest.h:127
Flag
Definition TESQuest.h:116
std::uint16_t index
Definition TESQuest.h:124
stl::enumeration< Flag, std::uint8_t > flags
Definition TESQuest.h:125
Definition TESQuest.h:198
ChangeFlag
Definition TESQuest.h:200
@ kQuestObjectives
Definition TESQuest.h:206
@ kQuestFlags
Definition TESQuest.h:201
@ kQuestInstanceData
Definition TESQuest.h:204
@ kQuestScriptDelay
Definition TESQuest.h:202
@ kQuestAlreadyRun
Definition TESQuest.h:203
@ kQuestScript
Definition TESQuest.h:207
@ kQuestRuntimeData
Definition TESQuest.h:205
@ kQuestStages
Definition TESQuest.h:208
Definition TESQuest.h:213
RecordFlag
Definition TESQuest.h:215
@ kIgnored
Definition TESQuest.h:217
@ kDeleted
Definition TESQuest.h:216