Hey there folks. I’d like to share something I’ve been working on for the past few months with you. Hopefully, given enough interest and a bit of time this tool will find its way to the marketplace.
This tool came forth from a personal gripe of mine that it is currently impossible to properly create branching dialogs in Unreal Engine. Doing it in Excel or some other “linear” editor makes it a gigantic pain when dialog choices mean that you can jump around different lines or even loop back. And let’s not mention any more complex stuff. Thus, after a lot of research, some tinkering and a lot more work, I am proud to present my Integrated Dialog Editor.
Important: Before reading on I’d like to clarify that this is a system for creating dialog data only. There are no UMG components or logic to actually display this data to the player. The dialog system is used to create and “traverse” dialogs. It is the developers choice how to display and use this data in their games.
Create complex branching dialogs easily using the familiar Unreal Engine graph editor. Dynamic branching is controlled via Flags that can be driven by outside events. Special conduit nodes work in a similar fashion to Select nodes in BehaviorTrees, in that the first node whose flag is set will get executed. Flags can be set per dialog or on a global level.
Each dialog line can be fully customized with a ton of integrated data. You can associate speakers, sound cues and animations to dialog lines, as well as add any number of dialog choices. The availability of lines as well as choices in lines is dictated by the set flags. Similar to FText::Format, you can use format wildcards in dialog text and feed values in later on when you start the dialog.
Dialog speakers allow you to define all the actors of your game and associate various properties with them. You can assign a skeleton that will be used with this speaker. This will in turn be used to filter the animation list for the dialog lines that use this speaker.
Conduits can be nested to control the flow of the dialog as complexly as you need it to be.
Since these dialogs tend to loop back quite a bit, redirect nodes are fully supported.
When starting the dialog from Blueprint (or code) you can fully customize all initial parameters as well as feed in data for wildcards. All of this can be done at any point during the dialog as well of course. It is important to note that it is fully possible to retain the state of a dialog if it’s canceled before it ends. This can be useful when it’s important to save and restore a dialog state such as with visual novels or Ace Attorney-style games.
Flags can be set or unset via the API dynamically but it is also possible to associate functions with flags to have them be queried automatically when the dialog system encounters the specified flag. These functions can be as complex as you need them to be.
You can hook into all of the important events and drive any and all of the game logic you can think of based on what happens in dialogs (Camera transitions, monster spawns, level loads etc.)
Everything in the plugin is using FText and as such fully supports localization.
- Bug fixes
- Improving editor tidbits
- CSV Import & Export
- (Done! See this post.)
Camera Adjustment Helper Component - This is a component that will be attached to the NPC that will be starting the dialog. It will provide a way to pre-define either static camera locations and rotations to transition to via dialog events, or alternatively, play a matinee. It will support stuff like “GetRandomCameraPoint” or “GetBestCameraPoint” in case you either want the camera to hop to a random location for randomness, or find the next best spot if he target point ended up in a wall because the NPC moved. Furthermore, it would handle the camera transitions.
Pre-defined wildcards (for example the SpeakerName used in the image above could be automatically retrieved if a speaker is assigned to the dialog line)
- Collapsing / expanding parts of the graph
Right now I am focused on debugging and polishing the core features; making sure everything is as user friendly as possible. If any other features come up internally or are requested I’ll attempt to work them in before moving onto the marketplace submission
If you have any questions, suggestions or comments, I’ll be more than glad to read them! Let me know in this thread!
Q: Alright but what about Slate / UMG? What do I do with this data?
A: As I said earlier, this is data only. It handles the flow of the dialog based on flags and whatnot under the hood. It is up to the specific game to implement their UI and a way to display the data. For example, when you talk to an NPC, you’d pass his dialog object to the HUD, bind all of the events for that dialog and show your UMG widgets that display the speaker name / dialog text etc. when the dialog starts, change the text after you call MoveToNextLine and hide it all inside of OnDialogEnd.
Q: This look awesome, but how much will it cost?
A: I don’t have the slightest clue at the moment. I will update the thread after I give it some more thought. I’d very gladly hear how much you’d be willing to pay for a system like this.