ElysQuestFlow
A data-driven quest system for Unreal Engine 5.6 with an integrated event bus, toast notifications, and quest tracking UI.
Features
- Event Bus — Decoupled GameplayTag-based event system. Broadcast events from anywhere, listen from anywhere, no direct references needed.
- Quest System — Abstract quest base with pluggable implementations. Ships with
SimpleQuest(DataAsset-driven) andBlueprintQuest(fully custom in BP). - Toast Notifications — Slide-in notifications with type-based coloring. Auto-integrates with quest events (quest started, objective completed, etc.).
- Quest Tracker — Compact HUD widget showing tracked quest objectives in real-time.
- Quest Journal — Full-screen quest log with list, detail panel, tracking toggle, and abandon option.
- Blueprint-First — Every class is
Blueprintable, every widget is overridable viaBindWidget.
Architecture
┌─────────────────────────────────────────┐
│ Your Game Code │
│ (Broadcast events, start quests) │
└─────────┬──────────────┬────────────────┘
│ │
┌─────▼─────┐ ┌─────▼──────┐
│ Event Bus │ │ Quest │
│ Subsystem │◄─┤ Subsystem │
└─────┬─────┘ └─────┬──────┘
│ │
┌─────▼──────────────▼──────┐
│ UI Layer │
│ Toast / Tracker / Journal│
└───────────────────────────┘
Each layer works independently — you can use just the Event Bus, or just the Toast system, without the quest logic.
Quick Start
1. Enable the Plugin
Add ElysQuestFlow to your .uproject file or enable it in the Plugins browser.
2. Create a Quest
Create a UERPSimpleQuestDefinition DataAsset in the editor:
| Field | Value |
|---|---|
| Display Name | "Clear the Tavern" |
| Description | "Help the innkeeper deal with the goblin problem." |
| Sequential | true |
| Objectives[0] | Tag: Enemy.Killed, Count: 5, Text: "Kill 5 goblins" |
| Objectives[1] | Tag: Area.Secured, Count: 1, Text: "Secure the cellar" |
| Completion Event | Quest.Completed.ClearTavern |
3. Start the Quest
// From your PlayerController or GameMode
UERPQuestSubsystem* QS = GetWorld()->GetSubsystem<UERPQuestSubsystem>();
QS->StartQuestFromDefinition(MyQuestDefinition);
4. Broadcast Events
When a goblin dies:
UERPEventBusSubsystem* Bus = GetWorld()->GetSubsystem<UERPEventBusSubsystem>();
FERPEventPayload Payload;
Payload.Instigator = KillerActor;
Bus->Broadcast(FGameplayTag::RequestGameplayTag("Enemy.Killed"), Payload);
5. Add UI
// Toast notifications (auto-wired to quest events)
// Just having the subsystem active is enough — it creates toasts automatically.
// Quest tracker HUD
UERPQuestTrackerWidget* Tracker = CreateWidget<UERPQuestTrackerWidget>(PC);
Tracker->AddToViewport();
// Quest journal (toggle with a key)
UERPQuestJournalWidget* Journal = CreateWidget<UERPQuestJournalWidget>(PC);
Journal->AddToViewport();
// On input: Journal->ToggleJournal();
Next Steps
- Setup Guide — Detailed installation walkthrough
- Event Bus Guide — Deep dive into the event system
- Quest System Guide — Quest types and configuration
- Widget Guide — UI customization and Blueprint overrides
- API Reference — Complete API documentation