Dialogue Nodes [Open Source, C++, 4.20-4.22]

@CraftyWeazel You scored another buyer here. Congratz!

Thanks :slight_smile: I hope the Marketplace approval process doesn’t take too long, and that I don’t have to change too much things!

@CraftyWeazel Is it possible to create a struct in code and inject it into the system? Possible in place of the metadata? Passing by name is fine as long as names don’t change; passing by ref would definitely be preferable.

Regardless, you have a buyer here. This looks great.

@TBWright I know what you mean. At first I tried to make it work with a struct + metadata. By the way, metadata are still an important thing to me, as they allow you to pass information only for specific messages, without having to change the struct for all the nodes each time you want to add a new parameter.

But yes, passing a UStruct would be better. You could do it by modifying the code, but it’d be quite complicated as you would have to edit a lot of different things (nodes themselves, dialogue objects, dialogue execution node, etc.).

Just so you know, it is one of the next features I’m planning to implement (to let it be done even in blueprints), but I couldn’t find ways to do it before. Waiting for that, I guess I could make a little tuto that let’s you edit the source code in all the needed places to inject your own struct in it. Would it be okay for you?

I don’t think that would be necessary, especially if you’re planning on expanding that in the future regardless. The metadata paradigm seems versatile enough for my needs. I do like being able to pass arbitrary information that isn’t tied to a struct – it makes the plugin useful for more than just dialogues.

I’m truly curious to see what people can use it for actually ^^ while making it, I was trying to guess. It’s clearly not only dialogues. I also imagined ways you could use it to make different kinds of narrative games, passing timer informations for example.

I will try to make that update soon, along with a “Node was already executed” update (an optional boolean output for every line/option for designers to know if a specific point in a dialogue was already encountered). This, you can already do with blueprints, but it’s not quite practical yet.

This look nice, it would be great if includes some kind of “dialogue data-table” import feature, like read data from a xls or xlsm file.
Nice work thought.

Hey, just a quick update: I sent the first version of the plugin to Unreal Marketplace months ago, but it didn’t pass the examination process because of a building issue. I have to fix this but my work is currently taking me so much time that I can’t do it right away. I will try to fix this as soon as possible!

Nice idea Rykroft, I will consider adding that :slight_smile:

Hi Crafty,

I was surprised you did dynamic pins to non-code-related nodes. Lot’s of moving parts inside. Congrats. Our team is developing internally system (action machine) similar to yours. But we may consider to switch to Dialogue nodes (DN), because ours is unstable. So… allow me to torture you with questions :slight_smile:

Let’s assume we have a simple scene with a door and NPC.

  1. We can speak with NPC using DN. Great. Now imagine NPC speech is animated and voiced (aka Mass Effect dialogue). What if we want to show next Player Options (or some of these) somewhere in a middle of NPC speech?
  2. How about voiced and animated Player? This is the case when NPC waits for Player to finish his speech. It shouldn’t be there out of box. But does it extendable (using blueprint) to this level?
  3. Interaction with a door, is a kind of dialogue as well. Let’s say we need this: player starts interaction, UE4 plays “Open Door” animation (or sequence). After animation has finished - dialogue stops. Is it possible?

Hello there!

I’m back after another couple of months. Sadly the plugin didn’t pass the MarketPlace checking process because of a compilation bug, and I recently decided that maintaining an UE4 plugin working and up-to-date was a pain in the *** :rolleyes:

This is why I decided that I would release my plugin for free soon, letting the community give me some feedbacks about it. Keep updated, I think it will happen in the next month (just the time needed to update the plugin for the 3 last versions of UE4).

To answer your questions @CRYOMEN : all you said is possible, and quite easily. You have two ways to make things physically happen in the game (animation, triggers, anything) while a dialogue is playing.

  • You could do it directly into the dialogue tree definition, with “To BP” nodes that can trigger any blueprint thingy after a dialogue option is taken. I guess this is the way you saw it hence your questions about interruption/overlap.
  • You could, on the other hand, use the sound/animation optional pins that come with every dialogue line and option, and/or a special code of yours directly into the dialogue text. The main point of my plugin is that it is only the logic behind the dialogue: all the display is done by you, around the “Execute Dialogue” node. From this big hub-like node, you retrieve the current dialogue line and its player options (with associated audio/anim): it’s completely your choice to display them at any time you want, with any animation/sound, to interrupt whenever you want. The only thing you have to tell back to the “Execute Dialogue” node is which option was chosen and whenever the dialogue is abruptly interrupted.

To wrap this up, there is a pre-made thing to transfer audio/anim asset references as well as text (NPC lines and Player options).
For anything which will happen at every dialogue, like the possibility to interrupt the audio when the player choses an option before it’s finished, you should do it around the Execute Dialogue node (which you might only use once in your whole project).
For anything that happens once, in a specific situation (like opening a door or triggering anything), you can use “To BP” nodes inside the Dialogue tree to code any BP behavior (behind the hood, when it’s compiled, the dialogue tree creates an event in place of the “To BP” node, which it will trigger when the dialogue option is reached).

Please take a look at the PDF documentation on the original post for more details :slight_smile:

Ok, it’s released for UE4.20, UE4.21 and UE4.22, for now :slight_smile: All the source code is inside + binaries, so it should work if you just put it in your project Plugins folder (and activate it as always).

Will work on UE4.23 and UE4.24 soon.

Please do tell me here if there is any bug on these versions, this is a first trial!

(also I keep this post in Work in progress until I release the 4.23 and 4.24 versions, and everything is confirmed to be working fine)

Hi, is here any progress so far? I have been using CodeSpartan’s dialogue plugin but your look much better in terms of usage. I would pay for the plugin, too :slight_smile:

I Corrected and Now It Works for UE 4.26:
Plugin:

Example:

Just found this and not dived into to look at this yet, but im just wondering if we are able to read and write to and from these nodes

Iv been looking for a way to do something for a wile and im curious if this would be able to help
Its nothing to do with dialogues lol

I want to be able to have a bp ‘save’ its settings and be able to load them like a preset or profile
Im looking at these nodes and wondering if i could have it write text to one of the nodes and read from them.

Is basically have it write text like
‘Setting Name’ - ‘Setting Value’
In a list so that it can later read from this node to load the settings listed in the text

Iv been looking at ways to do this and im not happy with datatables and structs ect so im trying to think outside the box. Ideally id like to have all self contained so having the settings saved within the bp itself would be awesome

Anyone still using this? Tried updating the nodes so they also could contain a UAnimationAsset for the speaker, but it seems i’m not able to get the code to copy the reference to the generated object. Any pointers would be helpfull :slight_smile:

Solved it after a few hours, and a ton of reading, wondering and confusion! Got a hint about it in this thread, about the Expansion of nodes! :slight_smile:

Hey, could you clarify the license on this? Since you said it’s free, but have all rights reserved in the documentation. I would suggest making it MIT license so people like me could use it without any fear of copyright problems. We’re writing our bachelor project and would really like to use the plugin, but are unsure whether we’re allowed to.