Textbox - Dialogue Editor

hi! i recently uploaded a plugin for editing dialogues… theres not really much to write here so i will shortly explain how the plugin can help you and what it offers.

all the actual documentations are in the plugin’s directory, designed to be read directly from the engine’s editor

Textbox

User friendly UI

Resources/dialogues all managed from one docker panel. Editing resources is also made with custom windows, serving you all the required settings for the resources in one place

Node based dialogues

Dialogues are edited in a GraphNode based system. There’s several nodes to display and decide the path of the dialogue. Each visual node have a fading system for when showing and ending, and properties unique to them.
There are total of three visual and eight control nodes:

  • Dialogue as the main nodes of the plugin, displaying texts, having a character as speaker, settings for typewriter effect, pausing time, auto skip, freezing the time scale etc.
  • Picture for showing the picture resources
  • Choice that creates buttons on the screen with the texts of the each slot’s texts and deciding the path of the dialogue
  • Start/End for marking where the dialogue starts and ends
  • Point/Jump for the dialogue to teleport to positions of Point nodes using Jump nodes
  • Condition that iterates over its slots and checks the first value with the second value with the selected operator, using a code logic like if/elif/else to decide the path of the dialogue
  • Variable that sets/creates, deletes, and modifies the variables in mid dialogues
  • Random using weight based randomizer to select an outgoing and deciding path of the dialogue

Variable usage

Almost every control tag or node property accepts variable usage. Variables are keys stored inside a store resource within a dictionary. You can use them to display their values directly in the dialogue text, make condition checks, use them as properties like character voice volume for a specific dialogue, tween settings etc…

Custom resources for dialogues

Resources are for richening your dialogues. There are two type of resources; global and character owned. Character owned resources are stored inside the characters themselves and later can be accessed via first getting the character, and globals stored inside a global store where you can reach from anywhere. If a character is not unique then their resources are baked from a character template using a CharacterInstance node. After baked, they will have independent properties/resources and will be available to use those datas.
There are total of five resources:

  • Dialogue Packs holds dialogues in an array with themes and weights to return one randomly and play
  • Characters that act as speakers for your dialogues, has properties like voices that play in each printed character, names, images/videos as portraits
  • Emotions that are completely character-owned type of resources for your characters to change the visual properties in mid-dialogues
  • Variables to use almost everywhere in the dialogues
  • Pictures to display images on the screen either alongside with the dialogue or alone
  • Sounds to play in mid-dialogues via control tags, having settings for dB and pitch, and offering 2D/3D properties to adjust while inserting them to dialogues
  • States used by State Machine to gather all the dialogue nodes belonging to those characters that in the state and play the assigned packs accordingly

There’s also static Operators for each resource that can be used to edit, create, delete from user-side

Control Tags

Just like BBCodes there are custom tags that help you to manipulate the current playing dialogue node. There are total of eight control tags:

  • [variable] to insert a value of a variable in the dialogue text
  • [stop] to stop the typewriter from printing for an amount of time
  • [speed] to adjust the speed of the typewriter
  • [shake] to shake all the non user added theme nodes with an amount of power
  • [emotion] to set the emotion of the character
  • [sound] to spawn an AudioStreamPlayer/2D/3D mid dialogue
  • [signal] to emit a signal from the player that later can be connected to user-side scripts
  • [optionals] to change the other optional settings of the dialogue

Themes

There are three themes; Static that stays fixed on the screen, and 2D/3D that changes position in the world space based on the current speaker of the dialogue

LINKS

  • GitHub Repository
  • Asset Store

Contact e-mail

kirulink@proton.me

Bottom Text

if you want to see a preview, github page has one screenshot of an example dialogue and a quick
usage of the resource editor
tell me what you think, give me a feedback, write a suggestion or what features you think would be good, i always appreciate!..

6 Likes

I like the graph view. Would be cool if it integrated with Dialogic 2 or Dialogue Manager.

thank you! if you meant integrated like this one working with other dialogue plugins, i dont have any experience with those

I think the dialog needs to be stylable with some kind of theme, there shoild be an option for different layout modes (either position or anchor).

Also i need to interact with normal gdscript to call functions, emit signals or set variables.

Perhaps a higher level graph structure determines which dialog is available and when, so for example game characters could start complaining about resource availability after a catestrophic world event.

i left the theme making process with just godot’s own control nodes because i thought it would be more easy to understand and to customize… you can set their themes, add your own nodes without changing the hierarchy, or add your own scripts to the theme nodes. but i will look at it how i can improve to make it easier

currently the only way to call your scripts is would be by emitting a signal from the dialogue node, but i will code more accessibility for it in the future

for the calling dialogues like when an event occurs etc… i could try to add some functionality for it but im not sure how different it would be compared to doing it from user-side. currently, you could code it by gathering all the npcs, iterating over their dialogue nodes and play that specific dialogue either by a signal from user-side or with a global variable. if you have any ideas on how it could be implemented it would be greatly helpful… thank you for the feedback!

1 Like

For the event constrained dialogs they are just conditionally triggered on other external states.

I see what you mean about how the user-side could be written to enable or assign dialogs to NPC’s after a game state event, and then also after other dialog events, like for example character B has discovered that A is paying C for questing and therefore has a plot based problem …

All that type of conplexity is difficult to manage so perhaps a data structure like a graph manages all the states … theyre just not always visual.

I suppose a good idea would be enabling the dialogue system to be trivially linked in with other world management addons, then the user can decide on thier preferred technique.

1 Like

i could code dialogue nodes to check conditions using variables to play the entered dialogue. if fails, return an error or silently pass. and then in user side, for example if you have a PackedStringArray full of dialogue resource names, and when a dialogue throws an error when tried to be played, you could check this and pick another one instead and play that one… or just set an array of dialogues to play (it could be only one item to play a specific one, or multiple items to play one randomly) directly inside the dialogue resource when the dialogue node is failed because of that specific error

for the event triggering dialogues, i could set a variable setter like thing that emits signals when a variable changes to a specific value, or just when it changes. and then gather all the dialogue nodes of the characters that specified to play from the current scene and play them accordingly with the specified dialogue…

for linking the plugin with other plugins, i dont know if i will implement that because i dont know about any other plugins and i designed this one mainly to be used by itself… but i could check if i can make it work with this plugin if theres any suggestions

1 Like

I think a good design would make linking to other addons intuitive … an example use case of a world state machine or tree that activates or deactivates dialogs.

Its probably best viewed from the perspective of user scripting … if the user can easily operate the dialogs frrom script, then an addon (at least script based) can easily access them too.

If the dialogs had active / inactive flags then the user script wouldnt need to iterate over NPC’s, they could iterate over dialogs instead.

That leads to an idea about grouped dialogs … if dialogs are members of groups they could be switched en-masse. Again theres the example of pre and post apocalpse for group ideas.

So perhaps user scripting could handle all that with world states.

1 Like

Also if there was an activation property with groups, then there probably should be only one flag, not a group flag and a dialog flag. This helps to avoid confusion and potential bugs. So i would suggest the activation flag is a property of a group object and not the dialog. The dialog object could instantiate a group if not assigned to a group - then the groups can exist if only to be responsible for one dialog.

The situation may arise where a dialog is a member of multiple groups. Then i think activation could be set with binary logic … i.e. OR, AND or XOR etc

1 Like

yes, those are great ideas!.. i think the property could be set for both groups and per dialogues for customizability. i will code it later but i dont know what world state like plugins out there i could integrate it with… also, i have a contact email. i edited the post, its right above the bottom text. so if you have any more suggestions, thoughts, discussions etc. feel free to write an email

1 Like

Hi, yeah if i think of anything else i could send an email.

1 Like