FlexQuest - Editor integrated quest/mission/game flow system

Hey guys.

Decided it was time I posted up a bit of info on a project I’ve been working on, off and on.
FlexQuest is a plugin that provides a framework for incorporating quests, or in fact any kind of game flow involving stages and progression conditions/objectives, into your UE4 projects. The two main aims I had for it are:

  1. Flexibility/extensibility. It’s a framework rather than a plug & play solution. The latter is great when possible, but everyone has different requirements so I figured it’s better to require a little more setup and make as few assumptions about people’s projects as possible. The idea is it be usable for a variety of projects and not just those that fit within a narrow definition of what constitutes a quest.

  2. Editor integration. Most development time so far has gone into learning editor code so I can have a dedicated quest editor and seamless integration with blueprints. I don’t like the idea of forcing things into data tables when they don’t fit, or requiring manual entry of string ids that need to match up in various places. Nothing is finalized yet, but currently a quest is a special type of blueprint asset coupled with a quest tree (see below), where the nodes in the quest tree can themselves be blueprints with custom logic.

It’s been developed to work in single player and networked multiplayer (quest logic on server with client relevant data replicated).

[screenshot]https://dl.dropboxusercontent.com/u/43489474/FQ/questtree1.png[/screenshot]
Quest tree editor. Green nodes are built in flow control nodes, blue are the blueprint nodes you create yourself with logic to execute when the node is active, trigger node success/failure, etc. Multiple branches can be active in parallel if needed.

[screenshot]https://dl.dropboxusercontent.com/u/43489474/FQ/questnodeblueprint1.png[/screenshot]
Quest node is just a regular blueprint with some events you can hook into and functions to trigger node completion.

[screenshot]https://dl.dropboxusercontent.com/u/43489474/FQ/questlog1.png[/screenshot]
Example of a quest log widget.

So I guess I’d like to know (1) is anyone interested? and if so (2) what kind of things would you want from such a system?

If there’s interest I’ll put some more time into this for release on the marketplace, in which case any suggestions, or info on what kind of workflow you’d want when building quests/missions, would be really useful.

Although using pure blueprints could be used to achieve a quest system, I must admit this ui flow you have going is quite attractive. I can’t say I’m interested since I’m not in the RPG genre of development at the moment, but it definitely has potential to gather a following.

Hi Kamrann,

Looks pretty well done to me!

The only thing I’d suggest (which you’re probably already working on) is multiple categories for quests (known, active, completed etc).

And a compass widget with location markers for each task.

I would be interested in this :slight_smile:

This looks very interesting. But imagine you got 100 quests, each with about 500 words on average. Adding these directly into the game would be okay. But then a couple of weeks later you have to change 10 of them. Then you start to search for the text… Thus, it seems better to have a database based system which could be searched and edited from a single view, instead of clicking through hundreds of blueprints

For smaller collections of quests, definitely seems like a useful tool.

You are right of course that it would be doable in blueprints, indeed just about anything is with some work. I think the main benefit though is the framework for controlling execution flow based on conditions/triggers. You just connect up the node pins and the activation of a node will happen when your conditions are met, however you choose to specify them. To do this in blueprint would require a huge amount of boilerplate event nodes in a graph which could get out of hand pretty quickly with branching quests. You also wouldn’t be able to visualize easily your overall quest structure.

As I said, I’m hoping the system could be helpful for anything requiring condition-based game flow, even something like level progression, but it’s true RPG-style games are the most obvious use.

Thanks.
Quests already maintain an Active/Completed/Failed status. Quests that are discovered but not yet taken are something that I can easily add on, there are still a number of implementation decisions to be made before I proceed with that sort of thing though.

A compass widget might be a bit outside the scope of what I was aiming for since it’s rather specific to a particular kind of game, but I could certainly expose some kind of quest-associated locations with that in mind.

Appreciate the feedback, any other ideas always welcome.

Yep for sure. When I mentioned wanting things in-editor, I was referring really to the process of setting up quest logic and structure. There is no reason I couldn’t set up a way of associating external data with quests, so the pure data side of things could be managed outside the editor. I’ll definitely keep this in mind.

Note that it’s already the case, and this may be relevant to pbarnhardt’s comment too, that quest content can be easily reused - you can reuse quest node blueprints in multiple quests, and also instantiate multiple instances of the same quest with different initialization data.

Definitely interested in this!

This is a great idea. My current workflow basically uses the behavior tree system to achieve this. It’s overly complicated and really hacky when it comes to loading a saved game + state.

I’m going to try to add a video to the thread in the next day or two to give a clearer idea of how the system currently works.

For testing and demo purposes I created an inventory system, interaction/use system and a dialogue system, which would be included. They’re basic, but fully network ready, so the package might also be of interest as a C++ learning resource on top of the core quest system.

Looks great! ++ that its network capable, and dialog is a bonus

Sorry to hijack a pretty old thread, but the custom blueprint nodes you’ve implemented here looks absolutely phenomenal. Something I’m interested in doing myself too for showing and editing relationships between custom classes represented as nodes.

I noticed you have a great article on your website about Details Panel Customization. Would you be interested in writing a similar article about creating a custom node editor? It would be greatly appreciated, and something that I think developers like myself that like to get their hands dirty under the hood of the Engine would love too.

Thanks for the interest. Yes, unfortunately this project has been put on the back shelf due to other commitments and troubles in constraining its scope.

I’ll keep your request in mind, but in truth it’s a difficult subject to cover, at least in the form that I was trying to write articles for my site - concentrating on practical examples. Custom node editors are a pretty huge undertaking; it would be a big time investment for me to even get to grips again with what I already did, and even then my understanding of a lot of the code was the bare minimum to get something working. Plus, as you can see I’ve not had the time to write anything for the site recently.

There’s a good chance I’ll begin work on something that requires a custom editor again before long, perhaps I’ll put up some kind of dev log on the site at that point, rather than a full on tutorial. Can’t promise anything though.
If you need to do something like this, I can suggest looking at the behavior tree code (mostly in the Editor/BehaviorTreeEditor module, but also Runtime/AIModule for context). That was the code I adapted to create my editor.

Thanks for the reply and the extra information. I’ve ended up starting to try this out myself by doing exactly what you said. I’m also looking at some of the Sound Editor modules, Paper2D modules, etc for examples. I found that it really does require more than half a dozen classes of boilerplate before you can even start to see some results in the editor though.

For anyone else reading this, also check out this training stream video, which covers parts of extending the Editor by creating assets and custom node editors.

Yep, I used the behavior tree code as reference mostly because the AI code was what I was most familiar with. Obviously there are plenty of options for reference - Paper2D is probably a good choice since I think it was written a little more recently and probably follows best practices a bit more closely. It was written by Michael Noland, who also made that excellent stream you linked.

You may already have done so, but rather than trying to understand what parts you need and what you don’t, I’d suggest basically copying an entire module as a starting point. Rename everything and remove clearly irrelevant bits, until you get to the point you can compile and open the editor. Then you can gradually prune stuff you don’t need and alter what you do, as you get to grips with it more.