A downloadable system

This version is no longer supported - check out the new, better and simpler Dialogue System 2:

A highly customizable dialogue system perfect for story-driven RPGs and Visual Novels.

Includes GDscript parser, full dialogue system, examples of use, and two types of message visualisations:

  1.     MSG Box - classic messge display
  2.     MSG Bubble - bubble (floating) messages .


  • Fully developed GDscript parser
  • Two types of message display
  • Support for multiple choices (+ conditions)
  • Displaying variables in text (local and global)
  • Many customisation options
  • bbcode (bold, italic, underlined, color) for box messages
  • Text pauses for box messages
  • *NEW* Support for multiple languages


Designed to be used with this editor:

Any questions? Contact me: radmattsoftware at gmail.com



This system is currently unavailable

Development log


Log in with itch.io to leave a comment.

(1 edit)

Since this version is no longer supported and is unavailable for download, can you open-source this dialogue system and give it a free license?

May I ask is there any variable or signal I can use to connect to the rest of my GDscript code that tells me when there is no message box displayed? 

in other words, some variable or signal that allows me to check from my main script if a dialogue box is currently being displayed by your system? Needed for a game soon to release. Thanks.

(1 edit)

Note: the documentation to transplant this into a new project is incomplete.

* In the example project there is another singleton (G/Game.gd) which is referenced, and without it your game will crash. Then, MSG_Parser will access the functions/data in there, so you will have to debug how that's relevant to our application.

* In MSG_Parser there are functions level_root() and main() which will also error (and, even though this is exactly what main() does, there is 1 or 2 inline uses of 'level_root().get_node("main")'

It would be nice if all the things you need to change could be isolated in a single file; it was documented what you needed to change and why. It took a lot of work just to get my game to compile!

Edit: more things I learned... if you try to use "box" type and your character doesn't have voice pitch defined, it will also crash. You'll need to add code to MSG_Box where it crashes to have a default pitch.

that's a really helpful comment. Been having similar issues

(1 edit)

Maybe this is a stupid question but do you need Dialogue Designer for this? And vice versa do you need this for dialogue Designer  I am using godot 3.2

(1 edit)

Hi, I have bought this and the dialogue creator and so far eveything was working fine until I use variables. When in play mode the project will crash whenever I select a variable from one of my dialogue options. It will just crash without a warning. I print the variable list when I run the disalogue to try and debug and it does show.   variables{example_name: {type: 0, value}} but it crashes when I press the options. 

Also looking in the Output panel in Godot my first line of dialogue seems to be called 4 times which is strange,


I just got "Parser error: Unexpected assign" in Godot when trying to write to a global variable in an execute block.

My execute did this:

G.player.relationships.pharmacist.value += 5

Is this supposed to not be possible, or is there a bug?

Ran into the same thing found out you just have to write it like this GlobalNameHere.set("var" , true)

Ah, thanks. I ended up making functions for the things I needed to change but that's easier

(1 edit)

Hi, I just bought this dialogue system and I quite like it :)

Just wanted to comment to list a few issues I've had with setting up your dialogue system in my game. It's mostly about things that are hardcoded and that could do with being parameterised:

  • The camera node should be optional (I added ifs in the code to check if it's there)
  • Setting the camera in onready with a hardcoded path isn't great, a function to set it is better (in my game the scene changes and the camera doesn't always have the same path). In my game code I was just changing MSG.camera manually instead
  • There are a few sizes/offsets that are hardcoded in the singleton. Namely the y offset at which message bubbles are shown (it's 96 I think, which was way too much for my game with 16x16 tiles)
  • The global "G" reference should also probably not be hardcoded but instead be a variable that is set by the game. It's a bit weird otherwise to be forced to change how I manage my global singleton. That or some sort of API to get/set values to be accessible by MSG
  • There are other things hardcoded here and there that caused me issues but I don't remember them all

It would be really useful if there was an easy way to configure those things, or if they were at least in one place easy to customise (for example an MSG.Config object with variables inside?).

Those things could also be documented in the meantime, because I had to dig in the code to figure out why things weren't working.

Would it be okay if I released a text parser that returns a JSON dialogue specifically for use with this system for those who don't want to use Dialogue Designer? The Ren'py-like parser makes it quick to write scripts for this system and it contains no code from the addon.

Yeah, sure, but only if you release it for free :)

Absolutely! The basic version of the parser is here.  Thank you very much!

I assume this can be used in 3D?

Yes, of course. The dialogue boxes will work fine but for setting up dialogue bubbles in 3D, you'd have to chage it up a bit, this video should help you out: https://www.youtube.com/watch?v=TQ9UAEW7gOA

Thank you so much in advance for the reference.

I'll buy your editors asap.

Don't hesitate to send me an email if you encounter any problems.

Has this been tested with 3.2?

There will likely be a version for 3.2 once the stable branch gets released.

(1 edit)

Hi there! I just purchased, and I'm loving this so far. Its a little bit of a pain trying to resize everything to a pixel perfect screen, but I'm making my way through it okay. 

I'm currently trying to figure out where in the code the skip feature is used? I want to map it to a different button than the normal advance text button.

I'm also attempting to add an export variable onto the character script for changing between voice sound files. My current endeavors on this are not going too well. 

(1 edit)

In Parser.gd you have these lines which call the next() function:

func _input(event):
  if Input.is_action_just_pressed(dialogue_next_input):

As you can see the button for skipping the dialogue is called dialogue_next_input which can be changed in Project > Project Settings > Input Map > dialogue_next - by default it's [Space].

As for the voice sounds, you can add an export variable to characters, like this: export (AudioStream) var sound and then in start_message() in MSG_Box.gd and MSG_Bubble.gd add something like $SFX.stream = MSG.current_speaker.sound. That should work (haven't tested it though).

I hope that answers your questions :)

(3 edits)

Yes, I understood that far- perhaps I wasn't clear. When you press spacebar, the dialogue continues to the next line, but if you press space bar early, it skips the writing step. I want to split the functionality between that continue button and the skip feature into two different buttons, for instance, I could press "A" to continue the dialogue to the next line. But if I wanted to skip through the dialogue I want to press "B" instead of "A." Currently its a one button fits both situations, with the space key.

As for AudioStream, that worked! There's only one bug with this that I can see; the stream isn't set back to a default if stream file is null, so if null, the speaker will have the same voice as the last speaker. I'm looking into now 

" but if you press space bar early, it skips the writing step": I found out, that in my project the input map (Project > Project Settings -> Input Map >") ui_accept also used the space bar, therefore it skipped the writing step! Just remove the spacebar from ui_accept solves the issue!

Finishing the line and continue to the next line are mapped to the same button based on how this code is written; remapping the spacebar to the "e" key for instance will still cause the line to skip or finish when you press it. No matter what you remap the button to, you can still mash the one button in order to finish the dialogue. It needs to be rewritten to provide the functionality I'm talking about. I wanted to remap the skip text feature to a separate button in order to prevent players from accidentally missing dialogue. Keeping skip on a separate button makes the action more intentional.

(1 edit)

Can you document how to write the JSON dialogue filew for this system? I just installed your system and already I have no idea how to test my own dialogue because I can't understand what's going on in your demo's dialogue files.


This documentation should help you a bit: https://radmatt.itch.io/godot-3-dialogue-system-documentation. I've updated the docs with a new category (see 8. File Structure).

JSON files are difficult to write by hand, so I made a software for that: https://radmatt.itch.io/dialogue-designer. It it tightly integrated with this dialogue system so there's no need to modify the files by hand.

Can I change the way the dialogue box looks or does it have to stay the way it is in the video. Deal breaker for me


You can easily change the look of the dialogue box, its texture, colors, sound effects and much more. It was designed to be as customisable as possible. 

How can I change the look of the dialogue box? I'm missing this part too


Can you provide a detailed tutorial to help us setup this system?

Really appreciate it

Check this documentation:  https://radmatt.itch.io/godot-3-dialogue-system-documentation




Coming soon...

nice, thanks

 Documentation: https://radmatt.itch.io/godot-3-dialogue-system-documentation

Purchased, however will need a tutorial before I can start using it.

 Please, check out this documenation: https://radmatt.itch.io/godot-3-dialogue-system-documentation

Awesome. Thank you for making this.

And...I have another question. What is the difference between this system and the Dialogue Designer System?


Sorry for a late reply. The Dialogue Designer is an editor that can be used to more easily create dialogue files needed for this addon. The file format it uses (JSON) is quite complex and writing it by hand would be difficult, so I made the editor to make the process easier (but the editor is optional).

Moreover, this system is for Godot 3 only, and the Dialogue Designer can be used with any game engine. I hope that clears things up.

Hi. I'm interested in the system. However, I have a question. If I want my characters sprite box embedded in dialogue boxes to show emotions, this system can provide such support? For example, if my character is angry, I want to show an angry sprite when displaying the text. Then, when my character speaks with a normal mood, I want the character sprite to update to a normal face.

Yes, absolutely. There is a function there for executing code (like functions for emotion change) during the dialogue, and I even added face images to the text boxes in the demo, so all you need to do is to replace them with your own graphics and you're done.

Was developing a Godot 2d RPG Games. I am curious about your dialogue system. Does it support different fonts and textures for dialogue box? And is that possible in future to support Chinese language?

Yes, it does support different fonts, font sizes, textures, colors, styles, sounds, face graphics and more. I believe Chinese language is already supported, all you need to do is to find a font with Chinese characters and you're good to go! :)

Hi! I just bought the addon for Godot, but the zip file is damaged and I cannot even open the file. I tried in Windows and Ubuntu, can you help me please?

(1 edit)

Weird... It opens fine for me. What software are you using for unpacking? Have you tried downloading it again?

Edit: see this update. Tell me if it works now.

Hi, Matt, it works now, thanks a lot! I will be trying the addon, there is a tutorial?


I'm working on a tutorial. Should be up soon :)

Great! I'll be waiting for! Thanks!

Any word on this tutorial? I purchased the add-on and am trying understand it by going through your example demo but I'm having a tough time making heads or tails of how to actually put this into my project.

 Check out this documentation for help: https://radmatt.itch.io/godot-3-dialogue-system-documentation

Hey Matt,

I'm having problems adding this addon to my game. 

3.1 Godot on Mac OSX. 

I've tried adding all the "addon" folder contents to an add on folder in my game, but then there is no option to enable the add-on. 

Then I tried auto-loading the files like you had in your test scene. Still no dice. 

So I tried adding in my own custom JSON file created through your dialogue creator, then the example game would instantly crash anytime I tried to load my custom JSON. 

Help please? 

Please send an email to radmattsoftware@gmail.com with more info about the issues (screenshots would help too).

I am thinking about buying this one. But i have one question :D How hard / easy is customise dialog box? It works like classic 9-cut thingy? :D

It's really easy to customise both the dialogue box and dialogue bubbles. It does use a nine patch rectangle and it can be swapped for any image you want. Additionally you can change its position, colors, font, sound effects and more.


Yess... You can count me in when i got next paycheck :D I will buy everything what you got there :D

Hey, this seems very good, but is the DialogueDesigner required to use it ?

Absolutely not :) The editor is optional (but recommended). If you use a different editor or you want to write the dialogue by yourself, you can modify the main file a little bit and you're good to go. Hit me up if you'll have any problems with that and I'll help you.

Thanks for your reply^^

I'll probably buy this in the future because I don't need it right now, but it's sure an interesting tool :)