Dialogue Plugin

Okay, thank you, I’m not at all experienced with C++, so hopefully the vids help.

I’m very interested in picking this up, is it capable of being setup to call variables from the player character. Such as Name, Gender, Race, etc and inserting them into the dialogue?

Sure, you can insert your own macros, for example “replace %charname% with a variable” in the UMG widget.

Here, I’ll make a screenshot of how to do it:

  1. Insert %charname% into a dialogue.

https://i.gyazo./a2230ddcefbdb08204ddc22b67222ffd.png

  1. Go into the UMG widget and insert these nodes that I have selected on this screenshot. My character class has a variable “Name” which I use in this example:

https://i.gyazo./8d089be4296dc475afbaeb669c896b47.png

  1. Success:

https://i.gyazo./5ed7eb8fd8125012d021052e220612ae.png

Note that before you can customize the UMG widget provided with the plugin, it is recommended that you duplicate it into your project first as described in the documentation: 3. Customizing the widget.

That looks fantastic and exactly what I need! Last few questions before I pick it up. Does it currently have any support for text formatting, like Bold, Italics, Colours, etc? Also, I assume it could be setup so a dialogue option can call another UMG widget, such as a shop for example.

Sure, since the UI uses UMG you can implement text formatting freely. Here’s an example how you can style player’s “intimidate” lines:

In this example all player lines starting with [Intimidate] appear in green with a custom font:

https://i.gyazo./405db642c6b149613c8f6b6d70fdb3ce.png

In the Reply widget, add an Intimidate bool variable and these nodes:

https://i.gyazo./8cec1b0800c87ced6f7ead5ed8b72f4a.png

https://i.gyazo./6b3a4f4a8a3c1d607e14bd5f705ce220.png

Sure, you can easily spawn another UMG widget through the dialogue plugin’s conditions/events system.

Fantastic! Already purchased, going to make development so much easier and quicker now. Can’t wait to see what else you bring to the market in future.

UE 4.12 got released today, and so we just submitted Dialogue Plugin v1.1 to the Marketplace for review:

  • New: Zoom was introduced to allow easy workflow with large dialogues.
  • Code optimizations were implemented: 300+ nodes in the same dialogue are no longer causing performance issues. The number of dialogue nodes is now virtually unlimited.
  • Bugfix: UMG Widget no longer executes all children NPC lines that return “true”, but only the first one found to be “true”. A “break” was missing.
  • Bugfix: The asset tab now correctly displays which dialogue you’re editing, followed by a ‘*’ if it’s currently dirty.

We don’t know how much time it’ll take for the new version to get approved, so if you’re in a hurry to get it, just send us an email to [EMAIL=“.”]. with proofs of purchase (and your GitLab account name) and we’ll add you to a private repository where you can grab updates as soon we roll them out.

Hello, this is just awesome!

Considering C++ code. Is the code portable, so I can recompile plugin for Mac, Linux, Mobile or Consoles?

Kind regards

Hi. We haven’t tested and we don’t provide support for those platforms at this time.

Hi guys, awesome plugin!

My only complaint so far is the ability to mouse-zoom in/out when creating the data asset. If this was implemented, I would be in heaven :slight_smile:

Also, I was hoping, you see, I also have another need for something like this, as so far as how the nodes are organized, but without any functionality behind those nodes :slight_smile:

Basically, a dialog tree that has editable Title | Description… the arrows and such should remain the same. I’d buy said product for $9.99 (you guys already have the structure and such, so might be easy to strip the functionality and leave the node system intact?) Granted I could just use this system and not actually branch it to anything, but it would be nice to have something that doesn’t compile / add any extra coding to the game size. For example, take my “current” use of the plugin:

The zoom has been implemented in version 1.1, please see post #27 for more details.

We currently have no plans to release a node editor without the dialogue functionality.

We recorded a video tutorial on conditions and events for people who are interested:

I tried to follow the video but nothing seems to change, like I said in a previous post, I’ve never touched C++ before so I’m not too sure what I’m doing wrong, I tried making a boolean condition but can’t quite figure it out.

Is there a way to know when the dialogue is finished?

  1. Actually the compiler seems to ignore your code entirely, because what I see on the screenshot shouldn’t compile.

See post #37.

  1. Regarding the actual code and how to fix it.

Suppose the NPC character has a bool “isPartyMember” in it (in blueprints). If it’s true, this means the character is in your party. So, to check for it in dialogues, you can add:

https://i.gyazo./569b1393bb29f3f48f02387e56820f45.png

When you edit the dialogue, check “Has Conditions” and check “Must Be In Party” if you want to display that line only if the NPC you’re talking to is in your party. You will also have to add the actual logic that checks “isPartyMember” in the UMG widget, as per the video.

To access the NPC you’re talking to (so you can access its bool “isPartyMember”) in the UMG Widget blueprint, you need to do the following:

  1. Go into your dialogue widget and add a variable of your NPC class. Check “Editable” and “Expose on Spawn”.
    I used ThirdPersonCharacter, but you need to use whatever class you use for NPCs:

https://i.gyazo./d213719f6012df812057b64f8230683c.png

  1. When you create the Widget, you must assign the NPC you’re talking to.

https://i.gyazo./89d9f0f62be36b1d04354b04e358cf3a.png

And so then you’ll be able to check “isPartyMember” in your logic.

The dialogue exits in Dialogue widget -> ToNpcReply function.

Alright, so I bought the plugin myself to see how it works. It turns out it’s injected into the engine, so you need to do a few extra steps to be able to edit the code.

Here are the steps that were missing from the documentation and the video. They need to be performed before everything you see on the conditions/events tutorial: Missing steps

Cool stuff, just bought it tonight myself and am excited to try it out! Should save some time as I continue battling programming AI and haven’t the time to delve into too much interface work. I was wondering, is it possible to do something simple like adding a cast-to/set/get node and reference directly into the dialogue node interface? Such as being able to have your own functions accessible directly from the dialogue graph. Something like that would save having to compile C++ at all for events and triggers, then again it doesn’t seem difficult at all to do that with the guide you provided.

Awesome stuff! The way it’s graph-based makes complete sense to me for easily being able to see dialogue branching in a quest. Seems very well thought out in that you could fool someone into believing it ships with UE4 by default :wink:

[EDIT]Nevermind I figured out a nice solution (at least for my purposes) that I figured I’d share if anyone else wanted to do something similar, after following the provided video tutorials from the author and making a few tweaks.
http://i.imgur./RfP7ptB.jpg

Basically the tag system works well with anything else from the tutorial. I’m used to blueprints but this was my first time using C++ so I very funnily thought the Matinee was a specific function/variable and not just describing the variable FName, just renamed it to say QuestControllerBP instead of MatineeActor to maintain coherence :D. I chose instead to use an actor blueprint to store my custom gameplay-related events like doors opening, for unlike matinees, actor blueprints can be placed in multiple levels and easily be reused. Not to say Matinees aren’t bad either, especially for the example given in how it can animate normally static objects. Heck, I might end up calling matinees through my own actor blueprint so I can have camera angles during dialogue :smiley:

Anyways I basically made a new blank actor blueprint called QuestControllerMainBP, gave it a simple int variable (default 0), and gave it a new blank function called questchanged. Then I simply told it in my custom Dialogue Widget to find the class (just like in the video), change the integer, and then run the event questchanged. Now on any new blueprint I make a child of the QuestControllerMainBP, I can simply drag out from the event QuestChanged and do simple if statements to check which queststage the integer is currently set to, allowing me to trigger whatever I want to happen with blueprints depending on the stage set during whatever dialogue option triggered it. (IE, in the same dialogue tree, one option could set it to be 1, which would cause the QuestControllerMainBP child with a corresponding tag such as Quest1, to cause the NPC to become hostile. If I instead set it to 2, I could have it so the same blueprint gives the player coin, opens a door, triggers an animation or animations on multiple objects/whatever. The reasoning behind function vs event tick being it’ll only check the quest stage when it should while the player goes through the appropriate node in the dialogue tree.

Basically with this setup I should be able to have one QuestController that works with all the possible outcomes of a single Dialogue Branch, kind of inspired by how Oblivion and Skyrim relied upon QuestStages to basically define everything. Bonus points for conditions, meaning I’ll probably be able to make it so I can have one dialogue tree for multiple rounds of conversations as a quest progresses. (I’m a fan of having things condensed, organized, and child-based)

But that’s just my solution, the plugin itself is setup great and works wonderfully! It’s a joy being able to write and see everything laid out, while easily altering how the nodes path to each other or expand. Thanks for the release :smiley:

Finally bought this after weeks of looking at it.

I did however email . to try and get myself added to the Github. I made a foolish mistake of moving to 4.12 a week ago, and can’t actually use the plugin yet xD.

is there a way to bind the keys to dpad on a controller like in fallout4?