Quests

COMING SOON - This is the temporary place while I build it all out, and write down things here as they are created. Everything here is subject to change :)

Quest Object Hierarchy

With Game Modules, the Quest is a Scriptable Object which holds all the data about the quest, while the GameQuest is the runtime variant that can be serialized, and tracked throughout your game.
Each Quest has at least one Quest Step, and can have more than one. Each Quest Step has at least one Success Quest Condition, but can have more, and can also have one or more Failure Quest Condition, though this is optional.

Quest Events

The Quest system can automatically send events to followers who implement IFollowQuests. The QuestEventBoard can automatically send out events as the status changes on Quest and QuestStep objects. Your scripts can utilize the data to drive in game actions and behaviors.
The Blackboard module has similar functionality, where it can send out Events. QuestEvent objects are not entirely the same thing, as they are specifically intended to be used with the Quest system, while the Blackboard events are very flexible and agnostic to how they are used.
One notable difference, the QuestEvent value for status is specific to QuestStep.QuestStepStatus values, while the BlackboardEvent value for status is a string, with the intention that you will populate it as you see fit for your project.
QuestEvents and the Blackboard can be used together. The "Push the Button" demo quest uses both. The Blackboard system is used to store whether the player has entered various zones, while the QuestEvents handles a quest that requires the player to have entered those zones.
There could be times where you want to keep track of data with Blackboard, even if the quest that data relates to has not yet been activated.

Success and Failure

A Quest is deemed successful when all Quest Steps are successful. Quest Steps are successful when each Quest Condition in the success column has been fulfilled.
A Quest is deemed to be failed when at least one Quest Step has failed. A Quest Step has failed when at least one Quest Condition in the failure column has been fulfilled. Failure is optional -- Quests do not have to have any failure conditions.

Additional Options

Quests are very flexible. They can be automatically marked as success or failure, or optionally checked manually through your code. They can have only a single step, with a single condition, or many steps, with many conditions. Steps can be required to be completed in order, or can be set to be completed in any order.
And it's easy to get the data you need to create UI for your players, so they can easily see the status of quests that you choose to expose.