Quest System Framework
Technologies Used
Game Info
Gallery
Complete demonstration of the quest system framework
The framework addresses a recurring problem in Unreal Engine projects: quest systems that couple objective tracking logic directly to level actors or Player Controllers, making them difficult to test in isolation and expensive to extend.
The architecture separates concerns into three components: QuestManagerComponent (authoritative state), QuestObjectiveComponent (individual condition tracking), and QuestUIBridge (Blueprint-accessible event dispatchers for UMG without coupling UI to the data layer).
Objective completion is driven by GameplayEvent payloads fired from gameplay code. The QuestObjectiveComponent registers listeners on initialization for specific GameplayTag events. When a tag matching an objective's condition fires (e.g., Gameplay.Kill.Orc), the component increments its counter and evaluates completion. This eliminates the common pattern of checking quest conditions in Tick, which scales poorly with many active objectives.
Quest branching uses a node graph evaluated at runtime. Each quest has a directed graph of objective nodes. Completing an objective triggers evaluation of its outgoing edges, each carrying a condition. The first edge whose condition is satisfied activates the next objective node. This handles non-linear quest structures (choice branches, optional objectives) without complex switch statements in game code.
Gameplay
Core Mechanics
Game Modes
Difficulty
Key Features
Event-driven objective tracking via GameplayTag listeners, no Tick polling
Directed graph evaluation for non-linear quest branching and optional objectives
QuestManagerComponent with server-authoritative state and client-side replication
SaveGame serialization for full quest state persistence across sessions
Blueprint-accessible QuestUIBridge dispatchers for UMG integration without data coupling
Multi-language quest text support via Unreal string tables
Architectural Implementation
GameplayTag-Driven Objective Evaluation
Each QuestObjectiveComponent registers a listener with the GameplayMessageSubsystem for its required GameplayTag on BeginPlay. Gameplay systems fire tag events through the subsystem without any direct reference to the quest framework. The objective component handles deduplication and counter logic internally. This means new gameplay systems automatically integrate with quest tracking by firing the correct tag, with no changes to quest code.
Runtime Quest Graph Evaluation
Quest structures are defined as directed graph UDataAssets with node and edge descriptors. On objective completion, the QuestManagerComponent evaluates outgoing edges of the completed node in priority order. Each edge carries a condition function (tag check, inventory check, etc.) that is evaluated against the current game state. The first matching edge activates its target node. This supports branching, optional objectives, and mutually exclusive quest paths.
Outcomes
Framework deployed in 3+ Unreal Engine projects with minimal modification
Quest development time reduced by approximately 60% compared to bespoke implementations
Open source release with community contributions on GitHub