I don't know if this is the best Dialgue Manager tutorial ever or it's just that I can finally understand it after a year of working on my own Dialogue System (barely knowing about anything) because I didn't understand other tutorials. Whatever it's, thank you! It's very well explained despite being so short!
Thank you for all the work you've put into this plugin. I'm having a blast using it so far. It's been fairly easy implementing a skill check system a la Dungeons & Dragons using it.
I was about to make my own dialogue scripting language, but this looks really good and has almost all the features I need! I may edit it a bit to make it easier to work with my project!
@nathan_hoad nevermind, they were three things that I already resolved The first one was something I called metadata in my language that worked something like this: ``` @char:hero, expression:flabbergasted Woah! ``` But that can be replicated with tags. The second one was using the Godot's special syntax for accessing nodes (`$Node`, `%Node`) but it still works with `get_node`. And the last one was local variables, but I think accessing a dictionary from an autoload or the current scene is enough.
Something I don't understand (and is where all dialogue tutorials never explain) is how do you apply progression to the dialogue? Do you just run the same dialogue every time and depend on conditions and GameState to offer a different conversation? But that would mean having to check every variable until one matches your condition. And you need to do that every time? For expample: if first_dialogue is flase: - Nathan: Nice to meet you! But then you would need to check "first_dialogue" (even though you know you already had the first dialogue) every time you talk to Nathan for the rest of the game? Is there not a better approach to this?
I imagine that before running the DialogManager, you could do some conditional statements so you can change and load a different dialog (using a counter, and as the number advances, the dialog changes). If your problem is having useless data like the "first_time" var, then you could have a component for your Manager in that scene, checking how many times you started a dialog and switching for the next dialog script. When you reach a point where the dialog will no longer change, you can simply release the component and its manager, checking that the component no longer exists, will follow a normal dialog script from then on. But of course, this is ONE idea (as far as I understand the plugin) Pardon my English. Good luck
@mysteriousguy7966 how would I go about having and releasing that component? I though maybe some kind of container that gets generated at startup with only the needed dialogues and deletes them from the container when they are not needed. This may work?
Tags look very interesting, could you please elaborate more on them and how to call them from the scene's code? Great video and great plugin as always. Edit: NVM I'll check out your example project!
The plugin is simply amazing. I can’t stop discovering its vast capabilities. I have a question: I want to use uppercase text in my game. To avoid writing all dialogues in caps, I used this line in the Balloon script: next_dialogue_line.text = next_dialogue_line.text.to_upper(). It worked well: "hi Nathan" became "HI NATHAN". However, when I wrote "hi [wave amp=25 freq=5]Nathan[/wave]", the result was as expected: "HI [WAVE AMP=25 FREQ=5]NATHAN[/WAVE]". Is there a proper way to make the font uppercase while preserving BBCode functionality?
Dude, your plugin is really good, it greatly reduces the progress time of my game. However, could you tell me how to make the dialogue appear only once?
Is there a way to make each character have their own balloon? In my game, sometimes there are three characters speaking, and all the "idle" balloons wait for the next text for that character (something similar to Final Fantasy Tactics, Romancing Saga, and so on). As far as I understand your balloon code, everything happens inside just one balloon, right? Anyway, amazing work, mate. I'm seriously considering using this for my own project!
The example balloon is just an example. The idea is that you'd make your own balloon that suits your game and has whatever functionally it needs for that.
I have a game where I load a specific camera shot per dialogue, similar to that of the Class Trials in Danganronpa. How can I import this system within the Dialogue Manager?
The best dialogue addon in godot so far. I got a problem though. I store my characters name inside an array thats inside an array. When I try to call it through {{G.Player_Character_Resource["Characteristics"]["Race"]}} I get an error that leads me to the dialogue manager script on line 958 if index >= 0 and index < value.size():
I don't know if this is the best Dialgue Manager tutorial ever or it's just that I can finally understand it after a year of working on my own Dialogue System (barely knowing about anything) because I didn't understand other tutorials. Whatever it's, thank you! It's very well explained despite being so short!
Best dialogue addon in my opinion! Proud to be using it since v2 was still in beta❤
Love the addition of match statement
Glad to hear it 😎
Perfect timing for my visual novel :) this is awesome help
Thanks Nathan this is a great plugin! Looking forward to Bravest Coconut dropping on steam!
This is amazing! Such an excellent intro to the plugin. Even tho I’ve used it before i still learned loads
Thank you for all the work you've put into this plugin. I'm having a blast using it so far. It's been fairly easy implementing a skill check system a la Dungeons & Dragons using it.
How am I still not subscribed. Thanks for the plugin!
thanks a million, your addon is a godsend
This is my number 1 plugin! It's so useful and I love its flexibility.
I was about to make my own dialogue scripting language, but this looks really good and has almost all the features I need!
I may edit it a bit to make it easier to work with my project!
What features would you say are missing?
@nathan_hoad nevermind, they were three things that I already resolved
The first one was something I called metadata in my language that worked something like this:
```
@char:hero, expression:flabbergasted
Woah!
```
But that can be replicated with tags.
The second one was using the Godot's special syntax for accessing nodes (`$Node`, `%Node`) but it still works with `get_node`.
And the last one was local variables, but I think accessing a dictionary from an autoload or the current scene is enough.
There were more features, but they are super specific for my game, so they don't matter
I'd love to see more indepth tutorials for adding voice acted lines and translations for both the audio and text with POT!
I'll do a video on it at some point. In the meantime the example project on my itch.io page demonstrates the basic idea.
Something I don't understand (and is where all dialogue tutorials never explain) is how do you apply progression to the dialogue?
Do you just run the same dialogue every time and depend on conditions and GameState to offer a different conversation? But that would mean having to check every variable until one matches your condition. And you need to do that every time?
For expample: if first_dialogue is flase: - Nathan: Nice to meet you!
But then you would need to check "first_dialogue" (even though you know you already had the first dialogue) every time you talk to Nathan for the rest of the game? Is there not a better approach to this?
I imagine that before running the DialogManager, you could do some conditional statements so you can change and load a different dialog (using a counter, and as the number advances, the dialog changes). If your problem is having useless data like the "first_time" var, then you could have a component for your Manager in that scene, checking how many times you started a dialog and switching for the next dialog script. When you reach a point where the dialog will no longer change, you can simply release the component and its manager, checking that the component no longer exists, will follow a normal dialog script from then on. But of course, this is ONE idea (as far as I understand the plugin)
Pardon my English. Good luck
@mysteriousguy7966 how would I go about having and releasing that component? I though maybe some kind of container that gets generated at startup with only the needed dialogues and deletes them from the container when they are not needed. This may work?
Nice
Tags look very interesting, could you please elaborate more on them and how to call them from the scene's code? Great video and great plugin as always.
Edit: NVM I'll check out your example project!
The plugin is simply amazing. I can’t stop discovering its vast capabilities. I have a question:
I want to use uppercase text in my game. To avoid writing all dialogues in caps, I used this line in the Balloon script:
next_dialogue_line.text = next_dialogue_line.text.to_upper().
It worked well: "hi Nathan" became "HI NATHAN".
However, when I wrote "hi [wave amp=25 freq=5]Nathan[/wave]", the result was as expected: "HI [WAVE AMP=25 FREQ=5]NATHAN[/WAVE]".
Is there a proper way to make the font uppercase while preserving BBCode functionality?
Dude, your plugin is really good, it greatly reduces the progress time of my game. However, could you tell me how to make the dialogue appear only once?
Var DialogueHasShown = false
If CharacterIsSpokenTo
DialogueManager.thing
DialogueHasShown = true
Elif DialogueHasShown = true
Pass
oh there is a version 3 now? i wonder if i can migrate to it
How do you update from version 2 to version 3? Do I overwrite the files during installation?
Make a git commit. Then delete the dialogue_manager folder in addons and replace it with a fresh copy from GitHub or the AssetLib.
Is there a way to make each character have their own balloon? In my game, sometimes there are three characters speaking, and all the "idle" balloons wait for the next text for that character (something similar to Final Fantasy Tactics, Romancing Saga, and so on). As far as I understand your balloon code, everything happens inside just one balloon, right? Anyway, amazing work, mate. I'm seriously considering using this for my own project!
The example balloon is just an example. The idea is that you'd make your own balloon that suits your game and has whatever functionally it needs for that.
I have a game where I load a specific camera shot per dialogue, similar to that of the Class Trials in Danganronpa. How can I import this system within the Dialogue Manager?
I've never played Danganronpa but just guessing from your description it would either be implemented in your custom balloon or through a mutation.
It won't show up in plugins
I'll need more information than that.
Does it work for 3d projects out of the box?
There's already heaps of people building 3D games with it.
@@nathan_hoad Awesome!
Does it work well with C#?
There's a C# wrapper 👍
The best dialogue addon in godot so far. I got a problem though. I store my characters name inside an array thats inside an array.
When I try to call it through {{G.Player_Character_Resource["Characteristics"]["Race"]}}
I get an error that leads me to the dialogue manager script on line 958 if index >= 0 and index < value.size():
Can you raise an issue on GitHub for that?