💬 Create dialogs, characters and scenes to display conversations in your Godot games.

github-cover

Create dialogs, characters and scenes to display conversations in your Godot games.

ChangelogInstallationDocumentationCredits

Version 1.4 - Work in progress 🛠️ Godot v3.4

Getting started

You can read a step by step guide on how to use Dialogic here

📚 Documentation

You can check the documentation from inside the plugin or here

Installation

To install a Dialogic, download it as a ZIP archive. All releases are listed here: releases. Then extract the ZIP archive and move the addons/ folder it contains into your project folder. Then, enable the plugin in project settings.

If you want to know more about installing plugins you can read the Godot docs page.

You can also install Dialogic using the AssetLib tab in the editor, but the version here will not be the latest one available since it takes some time for it to be approved.

IMPORTANT

If you encounter any issue when exporting your game, try having at least 1 theme in your project.


📃 Credits

Made by Emilio Coppola.

Contributors: Jowan-Spooner, Arnaud, ellogwen, Tim Krief, zaknafean, and more!. Special thanks: Toen, Òscar, Francisco Presencia. Placeholder images are from Toen's YouTube DF series

Thank you to all my Patreons for making this possible!

Mike King, Tyler Dean Osborne, Problematic Dave, Allyson Ota, Francisco Lepe, Gemma M. Rull, Alex Barton, Joe Constant, Kycho, JDA, Kersla Margdel, Chris Shove, Luke Peters, Wapiti, Penny, Garrett Guillotte, Sl Tu, Alex Harry, Rokatansky, Karl Anderson, GammaGames, Taankydaanky, Alex (Well Done Games), GodofGrunts, Tim Krief, Daniel Cheney, Carlo Cabanilla, Flaming Potato, Joseph Catrambone, AzulCrescent, Hector Na Em, Furroy, Sergey, Container7, BasicIncomePlz, p sis, Justin, Guy Dadon, Sukh Atwal, Patrick Hogan, Jesse Priest, Lunos, Ceah Sharp, Mark Charnock

Support me on Patreon https://www.patreon.com/coppolaemilio

MIT License

Owner
Emilio Coppola
Software developer working in video games and websites.
Emilio Coppola
Comments
  • I can’t select any of my characters for my timeline function.

    I can’t select any of my characters for my timeline function.

    I can’t select any of my characters for my timeline function.

    Describe the bug To be honest I don’t know enough about coding to identify the bug. But everytime I can’t select any of my characters even when I can see them on the drop down menu. I’ve restarted the program and even started new projects. Please help!

  • Dialogic crashes exports

    Dialogic crashes exports

    The problem

    Describe the bug When running an exported version of my game, dialogic crashes it with this error message:

    SCRIPT ERROR: Invalid call. Nonexistent function 'get_value' in base 'Nil'.
              at: _process (res://addons/dialogic/Nodes/DialogNode.gdc:424)
    

    This doesn't happen when running from the editor.

    To Reproduce Steps to reproduce the behavior: I don't know how I did it so I can't show you how.

    Expected behavior I expect dialogue to show up when I start my game

    Screenshots Screenshot 2022-05-16 204614

    System (please complete the following information):

    • OS: Windows 11
    • Godot Version: 3.4.3
    • Dialogic Version: 1.4.1

    Solutions

    I don't know

    Workaround

    A delay before adding dialogic as a child, this didn't work

    Possible fixes I have no idea :/

  • Errors pop up with definitions

    Errors pop up with definitions

    The problem

    Describe the bug when I try to run a timeline, i get these errors: "invalid get index 'value' (on base: dictionary) " "[Dialogic] Error opening default definitions file: 12"

    To Reproduce Steps to reproduce the behavior:

    1. Go to definitions > add value image

    2. make a timeline with the value, for example i made a timeline called "ababa" with these events image

    3. try to run the timeline by adding it as a child of Node2D, like so: image

    4. the "hello" shows up fine, but then this error happens: image

    5. close the game, go back to the editor. in addition to the above error the new value doesnt show up in the dropdown anymore image

    this error pops up when i click on the value image

    Expected behavior I expect to see my value in the dialog or at least for the game to not crash i guess

    System (please complete the following information):

    • OS: Windows 10
    • Godot Version: 3.3.2.stable
    • Dialogic Version: 1.2.4

    Solutions

    Workaround

    What you tried to get the feature working: I tried to delete the addon and all the files and install it again and it didnt work

    Possible fixes

    Any idea to fix the issue or a link to the line of code that might be the cause for this problem

  • Can't add variables to published game with dialogic saves.

    Can't add variables to published game with dialogic saves.

    (Godot 3.5.1 + Dialogic 1.4.5)

    Problem = Can't add variables to published game with dialogic saves.

    Description... I am prototype testing my visual novel game.
    I am running a test scenario on which I am updating my visual novel after it has been published and out in the wild.

    While using the save feature of dialogic, I am having problems adding new variables to saved games in my early testing.

    Reproduce...

    1. MacOS
    2. Export Project
    3. Update game by adding variables, via dialogic IDE add event "Set Value", "myNewVar", to itself plus "1"
    4. Export Game.Pck
    5. Go to Game DMG in HardDrive, Open DMG and move to a folder. Right clicking to "Open Package Contents"
    6. Game>Contents>Resource>Game.pck
    7. Replace Game.pck

    Say, when a totally new variable called “myNewVar” is introduced after loading a saved game (that did not have “myNewVar” prior), and on continuing, the game progresses that “myNewVar” point, and adds “1” to itself, the game crashes.

    Updating character art and updating timelines seems to work just fine…

    But would love to have a way to update / adding new variables to the dialogic .json files and add variable content to deployed games. This would be also great in the new Godot 4 Dialogic 2 branch.

  • Dialogue Voice Support

    Dialogue Voice Support

    I Have updated the voice support implementation from my previous pull after suggestions from @Jowan-Spooner. This feature was also suggested on Issue 401

    This will allow users to play character voices during a text/question event event.

    How to use -Enable voices from settings. -You will be able to load audio files depending on your text event

    VoiceSupport

  • Option to Turn Off Name Label

    Option to Turn Off Name Label

    Is your feature request related to a problem? Please describe. Not all games need to have a name label, and it's weird that there's no option to completely disable them.

    Describe the solution you'd like A check box that would let me remove the name label entirely from a theme.

    Describe alternatives you've considered I set the offset to be off screen, but it's still loaded.

  • New way of making timelines outside of Dialogic.

    New way of making timelines outside of Dialogic.

    So, the timeline editor is one of my favourite features, but I've chatted and read a lot of feedback on what the writers need when making text heavy games, and they all want to use a regular text editor.

    Ink seems to be a pretty popular way of writing this kind of games, and the most common by far is just good ol' Ren'Py. Some even use google docs and copy-paste the text. Crazy, I know.

    The rest of the people I spoke with were not using any kind of system and they were just writing it in the json/csv/script itself and not needing anything else.

    I don't want to deprecate the timeline editor because I believe it is super nice to have, but instead of saving and loading that information into a json file that only a computer would want to read maybe we can come up with a way of storing that into a text file that is also human readable and editable.

    I would love to keep the syntax as simple as possible without compromising the functionality of the events so I propose something like this:

    [character join Max]
    Max - Hello there! I'm Max and the only reason why I'm talking is because I have to fill out the screen with something
    [audio play chill-music.ogg ]
    [wait 2]
    Max - Okay, bye!
    

    A Text event could also be capable of parsing this kind of content, so if you want to write like this in the timeline editor you can do so. This will bring more flexibility in terms of how you write timelines specially for sections without a lot of special events.

    At the moment this is a very early draft of the idea, but I wanted to write it out here so I can continue working on it and also getting feedback from anyone who might be interested.

  • if condition does not work

    if condition does not work

    The problem

    Describe the bug I have set up two if conditions in my timeline. If a value is 0 it's supposed to change the timeline. The default value is 0 and the if condition is always skipped over.

    To Reproduce

    1. Create an definition with a value of 0
    2. Create a timeline with an if condition for that value equaling 0
    3. Run the dialogue

    Expected behavior Since the value is 0 the timeline should change

    Screenshots Timeline1 Definition

    System:

    • OS: Windows 10
    • Godot Version: 3.3.2 mono (not using C# for this project though)
    • Dialogic Version: 1.2.4
  • Set value node not updating values for the current run

    Set value node not updating values for the current run

    • Dialogic version: rc_1.0, commit 853f991d8089777b9aff2607310c7251c04086da

    Summary

    When using Set Value node to change a variable definition, it only takes effect on the next run.

    Screenshot_20210315_174354

    For example, in the above screenshot, if the initial value for test_value is 1 (set in the definitions tab)), then the if will be triggered, even with the Set Value node. If I check the definitions tab after the run, test_value is 0. If I run again, the if is not triggered as expected.

    The bug might also come from the if node not reading the updated value, I didn't know how to test that.

    The problem

    What is the current behavior?

    Set Value nodes updated values can only be used in subsequent runs.

    What is the expected correct behavior?

    Set Value nodes should update the value to be used in the current timeline, in the current run. Maybe this is the correct behavior, but if it is the case it should be documented.

    Solutions

    Workaround

    In dialog_node.gd, event_handler function, condition branch, I added the line self.load_config_files() at the beginning of the branch to force definitions refresh. I haven't tested everything so I don't know if it breaks other stuff, but at least it fixes my issues with if statements

    Possible fixes

    Currently, definitions are only parsed at the beginning of the dialog. They should be kept in sync, by parsing again the definitions before using them, or by updating them after a change.

    Thanks for this beautiful plugin, keep up the good work!

  • Text events gamebraking problem

    Text events gamebraking problem

    The problem

    Text events bug out, start to copy and paste previous text aswell as person talking

    Recreate

    1. Create characters, and make a dialog
    2. Make multiple dialogs between 2 of those characters

    Expected behavior I expected it to just show me the next thing in line, instead it keeps repeating the same thing over and over again after it bugged, restarting the project making those bugs permanent and deleting any previous text.

    Screenshots Screenshot from 2021-06-29 17-51-47 Screenshot from 2021-06-29 17-44-36

    System (please complete the following information):

    • OS: Linux
    • Godot Version: 3.3.2 stable
    • Dialogic Version: 1.2.1

    This has taken quite a bit of time from my day trying to work around yet I have no idea how to fix it, please help

  • History Subsystem

    History Subsystem

    History subsystem. Built to be flexible so it can be used in various different ways. Has two different types of histories: a full history stack of all events, and a separate history of just all read text options. Full history is meant for multiple uses including data rollback, read text is more focused for VN/RPG type use, where it typically allows for styling the text a different color or allowing for a toggle to only skip already-read text (see #1100). before saving it into the full state, it will strip the actual Event object from the timeline

    I copied it's files from the Glossary event, so some of them are currently still Glossary files. I'm using this draft to document things I need to implement:

    Core necessary things:

    • [x] actual project settings to enable the system as a whole, whether the two separate histories are used individually, and the actual length of the full history (sometimes you don't want 100% of it and only allow a player to go back only so far back)
    • [x] saving a few of the key things needed for a rollback that aren't directly in the history stack (choices made, previous variable values when they are changed, etc).
    • [x] options to save expanded data from a few of the specific event types to the save file directly, if wanted. also a function to be able to reload the timelines separately and grab those events to repopulate it after loading a save, if you're not saving expanded data
    • [x] an event to deliberately clear the history in a timeline (see for example DDLC's history manipulation)
    • [x] an additional type on the Text event for the already_read, and a quick check if it's in the dictionary on handle_event() to set that variable. ideally , beyond that any implementaion of different behavior with that set should be on a Theme rather than directly in Dialogic, probably

    A few other things will be tangentially made possible with this directly or with changes needed for making this enabled, so I'll link them as I go if I find them

    The above is all the core functionality of the History subsystem itself. Then after I'll make an example History view, probably mimicing the way that Dialogic 1.x History looks for starters. But as it's own subsystem of just data, people will be able to use it and customize the actual visuals of the history however they want.

  • Trailing slash eats next character line (fringe parse error?)

    Trailing slash eats next character line (fringe parse error?)

    The problem

    Describe the bug Found while editing and swapping between editor views and swapping between multiline dialogs.

    Trailing "" backslash will display in visual editor but the following line is hidden. When testing PlayTimeline, the backslash is not shown, and the following line is not shown.

    To Reproduce Steps to reproduce the behavior:

    1. per screenshot - add a trailing backslash on a line that isn't intended to be multiline.

    Expected behavior Likely - to ignore the multiline meaning, and display the slash and the following dialog.

    Screenshots image

    System (please complete the following information):

    • OS: Win10
    • Godot Version: 4 beta 10
    • Dialogic Version: 2-alpha-5

    Solutions

    Workaround

    Obviously, don't do it 😅 but accidents happen. Remove the character is the obvious fix, but it isn't displayed while previewing so its harder to find.

    Possible fixes

    It has the feels of a fringe regex parse issue? just checking for {Multiline}{EOL}{ ** } rather than {Multiline}{EOL}{! Command}{ ** }?

  • Cant add dialog as child in Godot 4, but in Godot 3.5

    Cant add dialog as child in Godot 4, but in Godot 3.5

    I cant add dialog as a child in Godot 4. I use this code: var dialog = "Dialogic.start(DIALOGNAME)" and "add_child(dialog)", it says this also in the documentation. This however adds the dialog always to my root, instead of the node the script is attached to. I tried to recreate this in version 3.5 but there I had no issues. In Godot 4 the dialog also runs even without the "add_child(dialog)" as opposed to the 3.5 version. Maybe im too dumb or this has to do with the DialogicDefaultScene.tscn and you have to change some stuff there?

  • Confusing capitalization and missing file error

    Confusing capitalization and missing file error

    When opening the usual Dialogic project I get this errors on the output window. I'm not sure why, because by using an external editor and searching on all the project's files, I can't find any reference to DNextIndicator.gd nor Subsystem_Text.gd/SideBar.gd capitalized like that. So I'm not sure if this is an issue with the current project or the .import files, but I can't seem to find the origin of it.

    Attempt to open script 'res://addons/dialogic/Events/Text/DNextIndicator.gd' resulted in error 'File not found'. drivers/windows/file_access_windows.cpp:104 - Case mismatch opening requested file 'Subsystem_Text.gd', stored as 'subsystem_text.gd' in the filesystem. This file will not open when exported to other case-sensitive platforms. drivers/windows/file_access_windows.cpp:104 - Case mismatch opening requested file 'Subsystem_Text.gd', stored as 'subsystem_text.gd' in the filesystem. This file will not open when exported to other case-sensitive platforms. drivers/windows/file_access_windows.cpp:104 - Case mismatch opening requested file 'SideBar.gd', stored as 'sidebar.gd' in the filesystem. This file will not open when exported to other case-sensitive platforms. drivers/windows/file_access_windows.cpp:104 - Case mismatch opening requested file 'SideBar.gd', stored as 'sidebar.gd' in the filesystem. This file will not open when exported to other case-sensitive platforms.

  • Allow very basic themeing (especially font) through dialogic editor

    Allow very basic themeing (especially font) through dialogic editor

    While editing or building a specialized dialogic display scene is the way to go for complex changes, something as basic as the font used should be easier to edit then

    1. Search for the DialogicDefaultScene in the file system
    2. Open it
    3. Search for the DialogText node
    4. Open inspector
    5. Search for the font options in Theme overrides
    6. Change the font

    The hardest thing about this is to know when to stop with what options we provide.

    This request comes from a tester from discord, but I strongly agree that this should be a thing even if it's mostly for testing.

  • Harmless error on accessing variables in folders

    Harmless error on accessing variables in folders

    If you access a variable like "Player.Name" through Dialogic.VAR.set_variable() it will print an error, even though it is set correctly. To fix this, one if has to be changed to an elif.

Reliable, thin UDP library for Golang targetting games.

⚠️ Do not use this. There's a lot to be worked on here and it's still not comple

Dec 27, 2021
netstat-nat - Display NAT entries on Linux systems

netstat-nat This is a reimplementation of the netstat-nat tool, written entirely in Go. It uses the same command line flags and almost the same output

Oct 26, 2021
x-crafter is used to quickly create templates from your prototype, also come with a builder to quickly regenerate your code

XCrafter ?? x-crafter is used to quickly create templates from your prototype, also come with a builder to quickly regenerate your code. Install Using

Nov 29, 2021
Send email and SMS broadcasts to your contacts. SMS are sent via your Android phone connected to your PC.

Polysender Send email and SMS broadcasts to your contacts. Polysender is a desktop application, so it does not require a complicated server setup. Ema

Aug 11, 2022
Simple application in Golang that retrieves your ip and updates your DNS entries automatically each time your IP changes.

DNS-Updater Simple application in Golang that retrieves your ip and updates your DNS entries automatically each time your IP changes. Motivation Havin

Mar 10, 2022
Create a QR code with your Wi-Fi login details
Create a QR code with your Wi-Fi login details

Wi-Fi QR Code generator Create a QR code with your Wi-Fi login details. Use Google Lens or other application to scan it and connect automatically. Ins

Dec 25, 2022
simplified helper to create http client calls to test your server

Overview Simplified creating http client calls for testing http servers or handlers. Cleanly build and execute http requests in tests so that you can

Nov 1, 2021
A server that proxies requests and uses fhttp & my fork of CycleTLS to modify your clienthello and prevent your requests from being fingerprinted.

TLS-Fingerprint-API A server that proxies requests and uses my fork of CycleTLS & fhttp (fork of net/http) to prevent your requests from being fingerp

Jan 7, 2023
Use pingser to create client and server based on ICMP Protocol to send and receive custom message content.
Use pingser to create client and server based on ICMP Protocol to send and receive custom message content.

pingser Use pingser to create client and server based on ICMP Protocol to send and receive custom message content. examples source code: ./examples Us

Nov 9, 2022
Provides the function Parallel to create a synchronous in memory pipe and lets you write to and read from the pipe parallelly

iopipe provides the function Parallel to create a synchronous in memory pipe and lets you write to and read from the pipe parallely

Jan 25, 2022
kcp is a prototype of a Kubernetes API server that is not a Kubernetes cluster - a place to create, update, and maintain Kube-like APis with controllers above or without clusters.
kcp is a prototype of a Kubernetes API server that is not a Kubernetes cluster - a place to create, update, and maintain Kube-like APis with controllers above or without clusters.

kcp is a minimal Kubernetes API server How minimal exactly? kcp doesn't know about Pods or Nodes, let alone Deployments, Services, LoadBalancers, etc.

Jan 6, 2023
EU Digital Covid Certificate utilities in Go [Create, Validate and Parse Green-Pass/EU-DCC]

go-dcc EU Digital Covid Certificate utilities in Go [Create, Validate and Parse Green-Pass/EU-DCC] Repo work in-progress CLI Usage: ######Create and S

Dec 23, 2021
Traefik proxy plugin to extract HTTP header value and create a new header with extracted value

Copy header value Traefik plugin Traefik plugin that copies HTTP header value with format key1=value1; key2=value2 into a new header. Motivation for t

May 26, 2022
Server-tool - A simple tool to run and create Minecraft servers

Server Tool A simple tool to run and maintain different Minecraft servers. This

Dec 15, 2022
This project provides fully automated one-click experience to create Cloud and Kubernetes environment to run Data Analytics workload like Apache Spark.
This project provides fully automated one-click experience to create Cloud and Kubernetes environment to run Data Analytics workload like Apache Spark.

Introduction This project provides a fully automated one-click tool to create Data Analytics platform in Cloud and Kubernetes environment: Single scri

Nov 25, 2022
A tool helps connect to your AriPods when sound playing in your Mac

Auto connect to airpods this tool helps connect to your AriPods when sound playing in your Mac. dependencenes SwitchAudioSource $ brew install switcha

Dec 9, 2021
Proxy your Go Module`s Import Path from your own domain to a public host (e.g. github.com).

Go Modules Remote Import Path Proxy Proxy your Go Module`s Import Path from your own domain to a public host (e.g. github.com). For example Uber (buil

Nov 2, 2021
Traefik config validator: a CLI tool to (syntactically) validate your Traefik configuration filesTraefik config validator: a CLI tool to (syntactically) validate your Traefik configuration files
Traefik config validator: a CLI tool to (syntactically) validate your Traefik configuration filesTraefik config validator: a CLI tool to (syntactically) validate your Traefik configuration files

Traefik Config Validator Note This is currently pre-release software. traefik-config-validator is a CLI tool to (syntactically) validate your Traefik

Dec 16, 2021
Peoplenect - Keep track of all your professional connections on your machine

Peoplenect Keep track of all your professional connections. TODO Create database

Jun 2, 2022