CrimsonQuestSystemv1.0In development
Follow development on Discord

Data-driven, networked quests: stage graphs with polymorphic objectives, actions and conditions, a per-player fact database, hotfix overlays, and co-op sharing set per quest chain.

Coming Soon · Quests · Unreal Engine 5

Branching, networked quests that plug into any gameplay code.

Author each quest as a graph of stages with objectives, actions and conditional transitions. Your combat, inventory and dialogue code reports what happened through one ReportEvent call; the server tracks progress and replicates it to each owner. Co-op sharing is set per chain.

Why CrimsonQuestSystem

Author quests as data, report gameplay events from anywhere, and let the server keep every player's progress in sync.

Quests as stage graphs

A UCrimsonQuestDefinition is a graph of stages, authored in a dedicated quest graph editor. Each stage holds objectives with a completion rule (all, any, N of M), actions on enter and exit, and transitions whose conditions pick the next stage.

Eight objectives, one report call

Kill, Collect Items, Interact, Reach Location, Talk To NPC, Fact Set, Timer Elapsed and Channel Reported. Gameplay reports on the server through ReportEvent or a typed helper like ReportUnitKilled; active objectives filter the channel and payload and count themselves.

Actions, conditions, rewards

Stages grant items and XP, set facts, start, fail or complete quests, spawn and despawn actors, toggle data layers and play level sequences. Conditions combine with And, Or and Not over facts, quest state and player tags. Write your own actions and conditions in Blueprint.

A per-player fact database

UCrimsonFactDatabase stores typed facts (bool, int, float, name) for each player, replicated to the owner. Conditions branch on them, actions set them, and a Fact Set objective waits for one, so a choice in one quest can shape the next.

Co-op, set per chain

Each quest chain owns its sharing policy. Joiners keep their own state, inherit the party's, or are blocked (hidden or shown as locked). Progress syncs not at all, one way from the chain owner, or two way so any qualifying event credits everyone.

Hotfix quests without recooking

Data sources patch cooked quests with sparse overlays. Point FileOverlayDirectory at a folder of JSON overlays to iterate without a recook, or implement ICrimsonQuestDataSource to serve patches from your own live-ops backend.

A closer look

Report what happened, the quest listens

The plugin never references your combat, inventory or dialogue code. Those systems report events on the server, and each active objective filters the channel and payload and counts itself. Client-side triggers report through a validated server RPC.

  • Typed helpers for kills, pickups, interactions, dialogue and locations on Quest.Channel.* tags
  • ReportEvent takes any gameplay tag plus an instanced struct payload
  • With CrimsonCore, a message bridge feeds the Crimson message bus into ReportEvent automatically

React from Blueprint or C++

Bind the subsystem's events to rebuild a quest log or hand out rewards. Grant actions assume no inventory: they raise OnGrantItemRequested and OnGrantXPRequested, and your own systems deliver the item or XP.

  • Every subsystem event is a Blueprint delegate with a native twin
  • Read quest state, objectives and facts on the owning client
  • With CrimsonCore, quest state and grant events are re-broadcast on the Crimson message bus

Multiplayer from the ground up

Progression runs on the server, one component per PlayerState. Active quests replicate owner-only through a fast array, and a world director aggregates party progress and reference-counts the data layers quests show.

  • Join behavior per chain: independent, inherit or block
  • Runtime sync per chain: none, one way from the owner, or two way co-op
  • Facts replicate as a per-player subobject

Save anywhere, debug in PIE

The plugin writes no files. GetSaveData and ApplySaveData move progress in and out of whatever save system you use, and checkpoint stages call OnSaveRequested for you to override. The Quest Dev Tools show objectives advancing live.

  • Save mid-quest, reload, and the quest resumes on the same stage
  • Quests validate in the graph editor
  • Quests found through your scan paths are registered to always cook

Technical details

Engine
UE 5.8
Tested platforms
Windows
Blueprint-ready
Yes
C++ required
No
Network replicated
Yes
Dependencies
GameplayTags, GameplayAbilities, NetCore, UMG, DeveloperSettings, Json, JsonUtilities, SlateIM, GameplayTagsEditor

Frequently asked questions

Can I buy it yet?
Not yet. CrimsonQuestSystem is still in development and not on sale. It needs no other Crimson plugin, so when it ships it drops into any project on its own, or next to the rest of the suite without dependency conflicts.
Does it depend on other Crimson plugins?
No. It is fully standalone and builds on engine plugins only. Gameplay reaches it through ReportEvent and the typed Report* helpers, and it answers through its own delegates. With CrimsonCore, the free integration layer for the full suite, a message bridge connects the Crimson message bus to ReportEvent in both directions and adds a quest event that counts any bus message on a channel.
Do I need C++?
No. A Blueprint project enables the plugin, adds the progression component to its PlayerState, spawns the world director from its GameMode, then accepts quests, reports events, binds the subsystem events and saves progress with Blueprint nodes. Custom actions and conditions subclass in Blueprint. Two things are C++ only: objectives that parse custom event payloads (Blueprint uses the Channel Reported event instead), and the progression component's per-player delegates (Blueprint binds the subsystem events instead).
Does it work in multiplayer?
Yes, it is built for it. Quest events run on the server, progress replicates owner-only, and client-side triggers report through Server_ReportEvent, which the server validates. Each quest chain decides whether joiners keep their own state, inherit the party's, or are blocked, and whether progress syncs none, one way or two way.
How do I save quest progress?
With whatever save system you already use. GetSaveData returns a save struct on the server and ApplySaveData restores it, resuming each quest on the same stage. Stages marked as checkpoints call OnSaveRequested, which you override in a subclass of the progression component to write the save.
Do I need an inventory or leveling system?
No. Item and XP rewards raise OnGrantItemRequested and OnGrantXPRequested for your own systems to fulfil. The Has Item and Player Level conditions ship as stubs that you override in Blueprint to read your inventory and leveling.

Quests that fit the game you already have

Add one component to your PlayerState, spawn the world director, and report your first kill. CrimsonQuestSystem is still in development; the Quick Start shows exactly how it wires in.