[OPEN SOURCE] Not Yet: Dialogue System

Hi! Looks like a great plugin and I’ll check it out later today. I just want to know if it’s network replicated? To let friends join in on conversations. And if it’s not, would it be a pain to add my self with the structure the plug in is created with?

Thanks! That works really well!

The plugin itself is not replicated.
If your game is however, and properly synchronized between the different clients, it is not hard at all to make it work with your logic - the actual “control” happens in game side. You can just use RPC-s to execute the necessary functions to proceed in the dialogues on all clients.

The only problematic case is if you use random in conditions.

Condition checks against another participant’s values are a thing now:

comparetypes_optimized.gif

I’ll try to take a look into adding variables to texts from editor similar to FText::Format next.

Thanks for the update. Looks like you can check if you’ve been down a path before too. Before you push the update to the other branches though, it looks like the return value goes away when checking against another participant’s value. Any chance you could bring that back? There may be cases where you want to be able to enter if 2 bools aren’t equal. Same for FName and operation for int and floats checks (I’m assuming it’s not there because I’m on 4.19 and don’t have space to install 4.18).

Good point. Actually FName has the bool, and the operation parameter is still there for the rest. Only the bool one does not have this option right now - I’ll add it in a second.
Good that I made the gif from the bool so you could catch this early :slight_smile:

Text argument support is added for Speech Nodes and Dialogue Edges. They work like FText::Format, but with dialogue variables.
You can find more about those here: https://docs.unrealengine.com/en-us/…ion/Formatting

The supported arguments are floats, integers, the gender stuff, participant display name, and class text variable.

text_arguments.gif

Something important just came up in discord recently:

Using **random **in any condition is **not supported **and can lead to undefined behavior. The dialogue system can call the conditions multiple time in an update and it expects to get the same results.

I was wondering if it was possible to get data from a data table and then convert it to a speech sequence. My script writer can’t use Unreal Engine so she can’t write anything into the dialogue asset, making the work inefficient. I want to convert dialogue from a data table with the data of rows, participant, and text to a speech sequence node that I can put into a dialogue. If it isn’t currently possible, how would I go about implementing it?

Unfortunately it is not supported. The base concept of the tool is that the writers and game designers can use it.
The options I see:

1.) Try to use the dialogue text format instead of data table. You can reload the dialogues from those. Here is an example - a dialogue with a single speech sequence node:

You could leave all empty/default values from that, but even then working with it is kinda meh.
Json is also supported but that is even less readable.

2.) You modify the dialogue editor source to add the functionality to construct a UDlgNode_SpeechSequence based on the data table. It is basically just creating the node and filling the SpeechSequence array.

3.) Add your own node type based on UDlgNode_SpeechSequence, which expects a a data table. You could just copy UDlgNode_SpeechSequence.h/.cpp and modify it so that it reads from the data table runtime instead of having that array.

If you don’t like the first option I would recommend to do the third - it looks easy enough if you know some C++ and you won’t have trouble with synchronizing when the data table is updated.

Thanks man, I am leaning torwards either option 3 or just using the dialogue system as a story board for events, and those events trigger a different system that reads data table. While the later is more simple to implement, it’s messy and kinda lazy. I only know the basics of C++ so I will try to see if I can even do it in the first place before deciding.

Let me know if you have any problem with option 3.

One thing I forgot to mention is that you will need to modify **FDialogueGraphNode_Details::CustomizeDetails, **otherwise your variable won’t be visible in the details panel.
Just check how **bIsSpeechSequenceNode **is initialized and what happens in the function if it is true - that is how **TArray<FDlgSpeechSequenceEntry> SpeechSequence **is setup from the speech sequence node, you will have to do something like that as well.

Hi,

Huge fan of the plugin still can’t believe you released this for free.

I have a small question, Just wondering what the procedure to end dialogue from a blueprint standpoint. I want to be able to end the dialogue with a button press and cant seem to figure out how to do it.

Thanks for taking the time, looking forward to your response.

If you want to terminate an ongoing dialogue just drop the dialogue context (set it with an empty setter).

Hi Elathan,

Thanks so much for getting back to me. Just tested it out, works like a charm!

Appreciate you getting back to me so quickly and supporting this free plugin so well!

Regards,

Marcus

Hi Elathan,

Another quick question, I’m working in VR currently and I can’t seem to figure out how to not have dialogue disable movement and interaction.

The closest example would be with the old behaviour tree dialogue system which allowed you to select UI, Game and UI or Game only to not have the dialogue disable input from the motion controllers.

Wondering if you can help

Hi Elathan,

Another quick question, I’m working in VR currently and I can’t seem to figure out how to not have dialogue disable movement and interaction.

The closest example would be with the old behaviour tree dialogue system which allowed you to select UI, Game and UI or Game only to not have the dialogue disable input from the motion controllers.

Wondering if you can help

EDIT: I found the solution! Don’t worry about the reply. Was going to delete this post but i’ll post what I did to solve it.

During the tutorial set up, in the Dialogue widget, it asks you to add a node called Set Input Mode UI Only. This disables the input. The solution is to either remove the node altogether or change the node to Set Input Mode Game Only. This fixes it. Works nicely now that I can now enable and disable dialogue with a press of the motion control button. : I found the solution! Don’t worry about the reply. Was going to delete this post but i’ll post what I did to solve it.

During the tutorial set up, in the Dialogue widget, it asks you to add a node called Set Input Mode UI Only. This disables the input. The solution is to either remove the node altogether or change the node to Set Input Mode Game Only. This fixes it. Works nicely now that I can now enable and disable dialogue with a press of the motion control button.

Hi Elathan,
Thank you for giving your awesome dialogue plugin to us for free! I have few questions.

1.Instead of pressing NEXT (edge) in dialogue, can I use delay for how long should my sentence stay and then go to next participants sentence? Or based on audiofile duration? With possibility to skip the sentences by pressing space or mouse click? Not sure how to do it and if it is possible. I am after the type of dialogue you can find for example in The Longest journey.
image_139798.jpg

  1. What would be best way to implement switching camera angles if I would like to have closeups on characters and camera movement + char animations. Just with the custom events?

Thank you.
David

Hi davidvacek,

1.) The dialogue control is in game side, and not inside the plugin - the way you proceed in the dialogues is totally up to you. You can use a timer instead of player clicking on “next” button if there is no real choice.
If you use audio you will have to that manually as well - after you started/proceeded in the dialogue you have to ask for the current node text, audio file, speaker, etc. - that is the point where you can setup your timer if you want to.

2.) Using only events for those might prove to be messy. Unfortunately I can’t really help you out with that one, as it is not something we need for our own games and we don’t have much time we can spend on the plugin right now. I am not even sure how I would build in support for those as that is something I did not look into yet.

Good luck for your project, I hope the plugin will be useful for you.

Thank you Elathan for getting back to me!

  1. thank you for clearing it out for me, will try to do it!

  2. it is not soo important feature to have right now, means also more work on anim side :), but nice to have in future…will skip it for now.

Thank you, I looked at your Warriorb project and looks really cool! Going to watch it on Steam for more updates. Plugin is definitely big help and speeds up the whole process! Before I was using dialogue by Artem Mavrin, but looks like it is not supported anymore :/.Can still build from sources, but thinking about switching to yours which is awesome alternative! I am still in pre-preproduction finding out best / easy way fitting my game needs.

I am facing a problem with this plugin, I think I already installed the plugin since the status changed from “free to owned” but I cant open project with dialogue system, anyone can help with this?
I am using Mac book. thank you very much.