Getting Started
Table of Contents
- Installation
- Step 1 – Create a Quest Data Asset
- Step 2 – Create a Quest Set
- Step 3 – Add a Quest Manager
- Step 4 – Author Quest Logic in StateTree
- Step 5 – Start a Quest at Runtime
- Step 6 – Implement an Objective
- Step 7 – Save and Load
- Diagnostics
Installation
- Copy the
PulseQuestplugin folder into your project’sPlugins/directory. - Re-generate your project files and compile.
- Enable the plugin in Edit > Plugins > Pulse and restart the editor.
The plugin registers:
- A Runtime module (
PulseQuest) - An Editor module (
PulseQuestEditor) – active only in the Unreal Editor
Step 1 – Create a Quest Data Asset
- Right-click in the Content Browser, choose Miscellaneous > Data Asset.
- Pick
PulseQuestas the class. - Open the asset and configure:
| Property | Purpose |
|---|---|
Tag | Unique GameplayTag that identifies this quest. Required. |
DisplayName | Human-readable quest name |
Description | Longer quest description |
StateTree | The StateTree asset holding quest logic (schema: Pulse Quest) |
QuestDataClass | Optional custom UPulseQuestData subclass |
MetaData | Optional extra object (icons, reward info, …) |
DefaultFlags | Bitmask of EPulseQuestFlags applied at start |
Validation: The asset will show an error if
Tagis empty or theStateTreeasset is missing.
Step 2 – Create a Quest Set
- Create a
PulseQuestSetData Asset. - Add your
UPulseQuestassets to theQuestsarray. - (Optional) Nest other
UPulseQuestSetassets via theQuestSetsarray.
The Quest Set is the allowed pool of quests a manager may start. The editor validates for circular references in nested sets.
Step 3 – Add a Quest Manager
Player-specific quests (Component)
Add the UPulseQuestManager component to:
APlayerControllerAPlayerState- Any other Actor
In the component’s Manager Params:
| Property | Purpose |
|---|---|
QuestSet | The Quest Set created above |
bAllowMultipleQuests | Whether multiple quests can run simultaneously |
QuestManagerDataClass | Optional custom manager data class |
QuestManagerViewModelClass | Optional MVVM ViewModel class |
QuestDirectorClass | Optional Director class |
bAutoManageAvatarActor = true automatically tracks the owning pawn’s changes when attached to a PlayerController or PlayerState.
Party/shared quests (Actor)
Place an APulseSharedQuestHost actor in the level (or spawn it at runtime). Configure ManagerParams in the same way. Use AddPlayer / RemovePlayer to manage participants.
Step 4 – Author Quest Logic in StateTree
- Create a
StateTreeasset. - Set the Schema to
Pulse Quest(UPulseQuestStateTreeSchema). - Configure schema defaults (QuestClass, QuestDataClass, QuestManagerClass, …).
- Add states and use the built-in Pulse Quest tasks:
| Task | Use case |
|---|---|
Quest Objective | Run an objective class while a state is active |
Start Quest | Start a sub-quest from within another quest/director |
Wait for (Quest Started) | Block until a specific quest becomes active |
Wait for (Quest Finished) | Block until a specific quest finishes |
Wait for (Objective Started) | Block until an objective class starts |
Wait for (Objective Finished) | Block until an objective class finishes |
- Assign the compiled StateTree to your
UPulseQuestasset’sStateTreefield.
Step 5 – Start a Quest at Runtime
Blueprint:
Quest Manager → StartQuest
Input: QuestTag (GameplayTag)
Output: bool (success/fail) + OutReason (failure tags)
C++:
FPulseQuestAddParams Params = FPulseQuestAddParams::FromQuestTag(MyQuestTag);
FGameplayTagContainer OutReason;
QuestManagerComponent->StartQuest(Params, OutReason);
Step 6 – Implement an Objective
Create a Blueprint or C++ subclass of UPulseQuestObjective:
UCLASS()
class UMyFirstObjective : public UPulseQuestObjective
{
GENERATED_BODY()
virtual EPulseObjectiveCompletionStatus InitObjective_Implementation(
const FPulseObjectiveHandle& Handle, const FGameplayTag& QuestTag) override;
virtual void ObjectiveStarted_Implementation() override;
};
To complete it from inside the objective:
CompleteObjective(EPulseQuestObjectiveCompletionMode::Success);
Step 7 – Save and Load
// Create a save game container
FPulseQuestSaveGame SaveGame;
FPulseQuestSaveGameView SaveView(SaveGame);
// Save
QuestManager->SaveQuestManager(SaveView, /*bAsync=*/true);
// Load (resets manager by default)
FPulseQuestManagerLoadParams Params;
QuestManager->LoadQuestManager(SaveView, Params);
Blueprint Async nodes are available: SaveQuestManagerAsync and LoadQuestManagerAsync.
Diagnostics
- Console:
Stat QUEST– performance stats for quest manager tick and event queue - Log category:
LogPulseQuest - Verbose logging via Unreal Visual Logger (context-aware
PULSE_QUEST_VLOG)