Implementation
1 - Initialization
| 
 1.1 - Call init function 
 Firstly, call "Init Modular Quest System" function from the default subsystem (you can also create your Own Subsystem), at the begin play for exemple, but you'll need to give a reference to your save, so make sure to init save before. Returns true if system has been initialized properly.  | 
 1.2 - Be careful 
 ⚠️You'll need to use the same subsystem as the one you initialized.  | 
2 - Use your own savegame object
| 
 2.1 - Add Interface 
 Add Interface "ModularQuestsInterface" to your savegame object.  | 
 2.2 - Override save function 
 Double click on "Save Quest" function to implement it (this is a function from the BPI).  | 
| 
 2.3 - Promote to variable 
 
 Right click on SaveData -> "Promote to Variable" (this is the variable where quests data will be stored).  | 
 2.4 - Override load function 
 Double click on "Load Quests" function to implement it.  | 
 2.5 - Use quest's variable 
 Use the promoted variable of quest saves as return value.  | 
Quests
1 - How to create a quest
| 
 1.1 - Create a Primary Quest 
 Right click in content browser, select Modular Quests -> Primary Quest.  | 
 1.2 - Select quest class 
 Choose your base class for this quest. You can create your Own Quest Type or use basic one.  | 
 1.3 - Quest Name & Description 
 Optional, can be used for widget or something else. 
  | 
| 
 1.4 - Quest steps 
 Each Steps of your quest. You can use default one or create yours if you need more accessibility (like doing something on step initialization, on tick, ...). 4 Events available: 
  | 
 1.5 - Quest rewards 
 Each Rewards of you quest. Given when whole quest in completed. 1 Event available: 
  | 
2 - Unlock Quest & Events
| 
 2.1 - Unlock Quest 
 Returns true if unlocked, false otherwiser. Fails if quest is already unlocked.  | 
 2.2 - On Quest Unlocked 
 Triggers when a new quest is unlocked. Returns quest's Data Asset reference.  | 
 2.3 - On Quest Fail 
 Triggers when FailQuest (Fail Action) is called, or when Fail Quest is called. Returns quest's Data Asset reference. 
  | 
| 
 2.4 - On Quest Step Finished 
 Triggers when a step has been validated (with validation objective or with auto validation). Returns quest's Data Asset reference and the index of the validated step.  | 
 2.5 - On Quest Finished 
 Triggers when all steps of the quest are validated. Returns quest's Data Asset reference.  | 
3 - Functions
| 
 3.1 - Getters 
 Getter functions used to get quest infos entered in the Quest.  | 
 3.2 - Helpers 
 "Get Step at Index" is basically a get array from getter "Get Quest Steps", but it's more... compact.  | 
Quest Type
How to create your own Quest Type
| 
 1 - Create a Quest Type 
 Right click in content browser, select Modular Quests -> Quest Type.  | 
 2 - Do your stuff 
 You can now implement your logic. Event Initialize is called when quest is unlocked.  | 
 3 - Your Quest Type as Primary Quest Class 
 You can now select your new Quest Type as Primary Quest Class! 
  | 
Steps
1 - How to create & use a quest step
| 
 1.1 - Create Step 
 Right click in content browser, select Modular Quests -> Step.  | 
 1.2 - Do your stuff 
 You can now implement your logic. 
  | 
| 
 1.3 - Select Step Type 
 By default, Modular Quests Step is selected. You can use it if you don't need custom logic inside step.  | 
 1.4 - Custom variables 
 Any variable you created inside your custom Step Type will be displayed here. You can override its defaults on each steps.  | 
| 
 1.5 - Step Name & Description 
 Optional, can be used for widget or something else.  | 
 1.6 - Tick interval 
 If checked, Event Tick will triggers each "Tick Interval" or each tick if Tick Interval <= 0. If unchecked, Tick will not triggers.  | 
| 
 1.7 - Step Objectives 
 Each Objectives of your quest. Required Objectives Count to Validate Step: 
 4 Events available: 
  | 
 
 1.8 - Validation Objective 
 Same as Objectives. If checked, selected Validation Objective will be used for step validation. Auto validates instead. 4 Events available: 
  | 
| 
 
 1.9 - Step Rewards 
 Each Rewards of this step. Given when this step in completed. 1 Event available: 
  | 
 
 1.10 - Fail Actions 
 Each Fail Actions of this step. Triggered when this step fails (when FailStep is called). 1 Event available: 
  | 
2 - Functions
| 
 2.1 - Getters 
 Getter functions used to get step infos entered in the Quest.  | 
 2.2 - Helpers 
 Returns the size of corresponding array.  | 
Objectives
1 - How to create & use a step objective
| 
 1.1 - Create Step 
 Right click in content browser, select Modular Quests -> Step.  | 
 1.2 - Do your stuff 
 You can now implement your logic. Call SetIsSuccess to update objective success state. 
  | 
| 
 1.3 - System functions 
 Main function is SetIsSuccess. You must call it so the system can handle step validation. 
 💡For exemple, you can test on the tick if GetPlayerCharacter->GetActorLocation is nearly equal to a custom vector variable with an interval specified on a custom float variable. Call SetIsSuccess to the value of this test. Inside Primary Quest, you can use this objective module multiple times in differents steps (and/or different quests) with different values! And tadaa! This objective will succeeded when your player reach specified position!  | 
 1.4 - Select Objective Type 
 You can use your objectives Types in Step Objectives aswell as Validation Objective. 1.5 - Custom variables 
 Any variable you created inside your Objective Type will be displayed here. You can override its defaults on each objectives. 1.6 - Objective Name & Description 
 Optional, can be used for widget or something else. 
 1.7 - Tick interval 
 If checked, Event Tick will triggers each "Tick Interval" or each tick if Tick Interval <= 0. If unchecked, Tick will not triggers.  | 
2 - Getters
| 
 
 Getter functions used to get objective infos entered in the Primary Quest or get the current objective progress count.  | 
Rewards
1 - How to create & use a quest reward
| 
 1.1 - Create Reward 
 Right click in content browser, select Modular Quests -> Reward.  | 
 1.2 - Do your stuff 
 You can now implement your logic. 
  | 
| 
 1.3 - Select Reward Type 
 Can be used for Quest rewards as well as Step rewards.  | 
 1.4 - Custom variables 
 Any variable you created inside your custom Reward Type will be displayed here. You can override its defaults on each rewards.  | 
Fail Actions
1 - How to create & use a quest Fail Action
| 
 1.1 - Create Reward 
 Right click in content browser, select Modular Quests -> Fail Action.  | 
 1.2 - Do your stuff 
 You can now implement your logic. 
  | 
| 
 1.3 - Select Reward Type 
 Action called when step fails. There are 2 pre-created fail actions: 
  | 
 1.4 - Custom variables 
 Any variable you created inside your custom Fail Action Type will be displayed here. You can override its defaults on each fail action.  | 
Quest Subsystem
How to create your own Quest Subsystem
| 
 1 - Create a Quest Subsystem 
 Right click in content browser, select Modular Quests -> Quest Subsystem.  | 
 2 - Events 
 You have many events that will help you realize your desires.  | 
| 
 3 - Accessibility 
 
 You can now access the subsystem from anywhere.  | 
 4 - Function 
 You can also get your subsystem by class like so. Output pin type will autmatically match input class pin.  | 


.gif)
.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)
.png)

.png)
.png)
.png)
.png)

.png)
.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)
.png)
.png)

.png)
.png)

.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)

                            Our Marketplace