Skip to main content

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) and BlueprintQuest (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 via BindWidget.

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:

FieldValue
Display Name"Clear the Tavern"
Description"Help the innkeeper deal with the goblin problem."
Sequentialtrue
Objectives[0]Tag: Enemy.Killed, Count: 5, Text: "Kill 5 goblins"
Objectives[1]Tag: Area.Secured, Count: 1, Text: "Secure the cellar"
Completion EventQuest.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