Releases: dialogic-godot/dialogic
Dialogic - 1.2
v1.2 - Organize it!
-
Functionality
- Added extra options to allow the user to disable/enable saving of definitions and current timeline [Arnaud]
Dialogic.start()
will add a CanvasLayer by default to avoid the confusion of not seeing Dialogic when using a camera. [AnidemDex]- Fixed many issues with portraits fading in and out
- Fixed a bug that prevented the BackgroundMusic event to work correctly [Jowan-Spooner]
- Experimental translation added! (This change simply adds a new setting to always treat text as a translation key, instead of displaying it directly. When on, text is sent through tr() before any additional checks are performed on it) [bojjenclon]
-
Editor
- Added sub-folders to all the resources to better organize your project [Jowan-Spooner]
- Improved resource picker aware of sub-folders [Jowan-Spooner]
-
Dialog
- Adding
[nw]
commands to automatically skip the text after 2 seconds without user input (Will be improved in future versions) - Choices can now print the definition values using the regular
[definition]
syntax - Next indicator is no longer visible when there are options to select
- You can now use
[speed=3]
or any number to change the speed of an individual event text speed
- Adding
-
Theme Editor
- Added new fonts selector for italics, bold, and names [Jowan-Spooner]
- Added new Box Padding settings to the name label.
- Added a new option to make the dialog backgrounds full width
- You can now set a character for the preview message
- Three positions for the name label: Left, Center and Right
- You can set the vertical and horizontal offset of the name label
- Added a new option to enable single portrait mode. In this mode, once the characters join the dialog, only one of them will be visible without the need of making them join and leave every time
- Added a simple fade in animation for dialogs. You can change how long it takes in the
Dialog Box
tab - New tab added: Audio
- In the audio tab, you can select a sound or set of sounds to play while the text is being typed in the dialog. [Tim Krief]
-
Character Editor
- You can now add a scene as a portrait, so you can now use AnimatedSprite or whatever you might need
- You can set nicknames to characters [zakary93]
- Fixed a bug when coloring the names of characters in text [zakary93]
- Added the resolution of the selected portrait image on the preview box
- You can now import a folder to automatically add all the images inside as portraits
- Removed the legacy "Default Speaker" option. I might revisit something like this in the future
-
Timeline Editor
- You can now select multiple events (
CRTL
for adding/removing an event,SHIFT
for range select) [Jowan-Spooner] - You can now use
CRTL+C
,CRTL+X
andCRTL+V
to copy, cut and paste events [Jowan-Spooner] - You can use
CRTL+D
to duplicate the selection [Jowan-Spooner] - You can use
CRTL+A
andCRTL+SHIFT+A
to select/deselect all events [Jowan-Spooner] - Some shortcuts where redone: Remove events with
DEL
, move selection up/down with theUP
andDOWN
arrow keys [Jowan-Spooner] - A SetGlossary event was added that allows to change the info of a glossary item during the game [Jowan-Spooner]
- You can now set the portrait of a character based on a definition [bojjenclon]
- New resource picker styles
- Modified the label on the emit signal event so it is easier to understand [Jowan-Spooner]
- Updated the look of some events and added some useful event warnings
- You can now select multiple events (
-
Other stuff
- Events have id's now. Nothing should change for the user, but it will be easier to manage the inclusion of new events or modifying existing ones [Jowan-Spooner]
- Fixed a non-breaking bug that printed some errors on the terminal
-
And many more! (kinda hate not listing all the changes, but don't remember all of them)
Dialogic - 1.1
v1.1 - With a little help from my friends
- Improved event dragging and selection [Arnaud Vergnet]
- Fixed a bug that prevented the deletion of Characters [AnidemDex]
- Fixed a bug that allowed you to overwrite the event on the theme preview dialog
- Added a folder icon to each section of the resource tree
- Greatly improved how the plugin is displayed in different display scales
- You can now filter resources from the main view [ellogwen]
- You can now duplicate themes (from the context menu) [ellogwen]
- Organized the images and other assets into a tidier structure [Jowan-Spooner] Warning! If you were using the example portrait assets you will have to load them again manually on the character editor
- You can now create resources by right clicking the section and selecting "+ New" [Tim Krief]
- Remade all the PopupMenu items in gdscript and replaced the icons with native editor theme ones.
- Experimental: Added a static proxy for C# projects. Testing wanted! [mscharley]
- Timeline:
-
New event
Call Node
: Call a Godot NodePath and a method name. In addition you can add arguments as well. The Timeline will execute those methods and wait for completion, if the method in question is async and/or yielding [ellogwen] -
You now can drag and drop events into the timeline! [ellogwen]
-
You can un select a selected event by clicking it [ellogwen]
-
The
Scene Event
can now take other Scenes (.tscn
) files as backgrounds. [ellogwen] -
The
If Condition
event can now use definition variables as values to compare against [ellogwen] -
You can now hide
Choice events
if a definition doesn't meet some requirements [Arnaud] -
You can now select a character to ask a question in the
Question Event
[Tim Krief] -
Added very basic syntax highlighting to the
Text Event
editor -
Fixed an indenting bug when removing events
-
The
Character Join
event now has a mirror option [Jowan-Spooner] -
The
Close Dialog
has a new setting for the duration of the fade-out animation. [Tim Krief] -
Scene Event
renamed toChange Background
to better represent what it does. [Jowan-Spooner] -
Both
Audio Event
andBackground Music
got more settings (audio Bus, volume, fade-length) [Jowan-Spooner] -
Shortcuts added! [ellogwen]
- Selecting previous and next event in the timeline with
CTRL + UP
andCTRL + DOWN
- Moving currently selected event up and down the timeline
ALT + UP
andALT + DOWN
- Remove the currently selected event node and selects the next/last event node
CTRL DELETE
- Create a new text event node below the currently selected and focus it's textbox to continue writing
CTRL T
- Selecting previous and next event in the timeline with
-
- Character Editor
- There is an option
mirror portraits
below the portrait preview now, that will mirror all portraits when they appear in the game [Jowan-Spooner] - Fixed a bug that prevented portrait previews to display if the extension was in capital letters.
- There is an option
- Theme Editor
- Refreshed the UI to make room for more properties for each section
- A reload of the preview dialog is performed when you change a property so you don't have to click the "preview changes" all the time
- Removed the limitation of only 100px for the padding of the dialog box
- Added a new option for changing the color modulation of the dialog background image
- Added new customization options (scale, and offset) to the next indicator image
- Added modulation settings to the name label background texture and the choices buttons background textures [Jowan-Spooner]
- Added an option to use native buttons styles for choices [Tim Krief]
- Added an advanced option to use a custom scene as a button for choices [Arnaud Vergnet]
- Added new settings to set a fixed size for choice buttons (This is used to prevent premade texture stretching)
- Fixed a bug where the text alignment wasn't being shown on the preview
- Fixed a bug with the name label shadow
- Fixed a bug with the "auto color" option in game
- Dialog node
- You can now use [br] to insert line breaks
- Questions now properly show the theme text alignment
- Options now show up when the question text finished displaying [Arnaud Vergnet]
- The close dialog now performs a fade-out animation
- Fixed a bug where Glossary Definitions plain text was being added to the name label
- Fixed an issue when trying to display small sprites as characters portraits
- Fixed a bug where portraits didn't come to the front when being focused [AnidemDex]
- Fixed a bug when the display stretch was set to
2D
- Fixed a bug where empty text lines were not removed properly [Arnaud Vergnet]
- Settings
- Added a new option to enable advanced theme settings [Arnaud Vergnet]
- Added a new option to toggle the character "focus"/"dim" while speaking
- Added a button in timeline inspector plugin to open the selected timeline in the editor [ellogwen]
- Special thanks to Jowan-Spooner for the QA and the facelift on the theme editor
Dialogic - 1.0
Create dialogs, characters and scenes to display conversations in your Godot games.
⚙ Installation
⬇ Downloading the plugin
To install a Dialogic, download it as a ZIP archive. All releases are listed here: https://github.com/coppolaemilio/dialogic/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 official documentation 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.
📦 Preparing the export
When you export a project using Dialogic, you need to add *.json, *.cfg
on the Resources tab (see the image below). This allows Godot to pack the files from the /dialogic
folder.
✅ Basic Usage
After installing the plugin, you will find a new Dialogic tab at the top, next to the Assets Lib. Clicking on it will display the Dialogic editor.
Using the buttons on the top left, you can create 4 types of objects:
- Timelines: The actual dialog! Control characters, make them talk, change the background, ask questions, emit signals and more!
- Characters: Each entry represents a different character. You can set a name, a description, a color, and set different images for expressions. When Dialogic finds the character name in a text, it will color it using the one you specified.
- Definitions: These can be either a simple variable, or a glossary entry.
- Variables: Can have a name and a string value. The plugin tries to convert the value to a number when doing comparisons in
if
branches. TO show a variable content in a dialog box, write[variable_name]
. - Glossary: Can have a name, a title, some text and some extra info. When the given name is found inside a dialog text, it will be colored and hovering the cursor over the name will display an infobox.
- Variables: Can have a name and a string value. The plugin tries to convert the value to a number when doing comparisons in
- Themes: Control how the dialog box appears. There are many settings you can tweak to suit your need.
Dialogic is very simple to use, try it a bit and you will quickly understand how to master it.
📖 v1.0 Documentation
Note:
The Dialogic
class exposes methods allowing you to control the plugin:
🔶 start
start(
timeline: String,
reset_saves: bool=true,
dialog_scene_path: String="res://addons/dialogic/Dialog.tscn",
debug_mode: bool=false
)
Starts the dialog for the given timeline and returns a Dialog node. You must then add it manually to the scene to display the dialog.
Example:
var new_dialog = Dialogic.start('Your Timeline Name Here')
add_child(new_dialog)
This is exactly the same as using the editor: you can drag and drop the scene located at /addons/dialogic/Dialog.tscn and set the current timeline via the inspector.
- @param
timeline
The timeline to load. You can provide the timeline name or the filename. - @param
reset_saves
True to reset dialogic saved data such as definitions. - @param
dialog_scene_path
If you made a custom Dialog scene or moved it from its default path, you can specify its new path here. - @param
debug_mode
Debug is disabled by default but can be enabled if needed. - @returns A Dialog node to be added into the scene tree.
🔶 start_from_save
start_from_save(
initial_timeline: String,
dialog_scene_path: String="res://addons/dialogic/Dialog.tscn",
debug_mode: bool=false
)
Same as the start method above, but using the last timeline saved.
🔶 get_default_definitions
get_default_definitions()
Gets default values for definitions.
- @returns Dictionary in the format
{'variables': [], 'glossary': []}
🔶 get_definitions
get_definitions()
Gets currently saved values for definitions.
- @returns Dictionary in the format
{'variables': [], 'glossary': []}
🔶 save_definitions
save_definitions()
Save current definitions to the filesystem. Definitions are automatically saved on timeline start/end.
- @returns Error status,
OK
if all went well
🔶 reset_saves
reset_saves()
Resets data to default values. This is the same as calling start with reset_saves to true.
🔶 get_variable
get_variable(name: String)
Gets the value for the variable with the given name.
The returned value is a String but can be easily converted into a number using Godot built-in methods: is_valid_float
and float()
.
- @param
name
The name of the variable to find. - @returns The variable's value as string, or an empty string if not found.
🔶 set_variable
set_variable(name: String, value)
Sets the value for the variable with the given name.
The given value will be converted to string using the str()
function.
- @param
name
The name of the variable to edit. - @param
value
The value to set the variable to. - @returns The variable's value as string, or an empty string if not found.
🔶 get_glossary
get_glossary(name: String)
Gets the glossary data for the definition with the given name.
Returned format: { title': '', 'text' : '', 'extra': '' }
- @param
name
The name of the glossary to find. - @returns The glossary data as a Dictionary. A structure with empty strings is returned if the glossary was not found.
🔶 set_glossary
set_glossary(name: String, title: String, text: String, extra: String)
Sets the data for the glossary of the given name.
Returned format: { title': '', 'text' : '', 'extra': '' }
- @param
name
The name of the glossary to edit. - @param
title
The title to show in the information box. - @param
text
The text to show in the information box. - @param
extra
The extra information at the bottom of the box.
🔶 get_current_timeline
get_current_timeline()
Gets the currently saved timeline.
Timeline saves are set on timeline start, and cleared on end. This means you can keep track of timeline changes and detect when the dialog ends.
- @returns The current timeline filename, or an empty string if none was saved.
❔ FAQ
🔷 How can I make a dialog show up in game?
There are two ways of doing this; using gdscript or the scene editor.
Using the Dialogic
class you can add dialogs from code easily:
var new_dialog = Dialogic.start('Your Timeline Name Here')
add_child(new_dialog)
And using the editor, you can drag and drop the scene located at /addons/dialogic/Dialog.tscn
and set the current timeline via the inspector.
🔷 Can I use Dialogic in one of my projects?
Yes, you can use Dialogic to make any kind of game (even commercial ones). The project is developed under the MIT License. Please remember to credit!
🔷 Why are you not using graph nodes?
When I started developing Dialogic I wanted to do it with graph nodes, but when I tried some of the existing solutions myself I found that they are not very useful for long conversations. Because of how the graph nodes are, the screen gets full of UI elements and it gets harder to follow. I also researched other tools for making Visual Novels (like TyranoBuilder and Visual Novel Maker) and they both work with a series of events flowing from top to bottom. I still haven't developed a complex game using both systems to tell which one is better but I don't want to break the conventions too much.
If you want to use graph based editors you can try Levraut's LE Dialogue Editor or EXP Godot Dialog System.
🔷 The plugin is cool! Why is it not shipped with Godot?
I see a lot of people saying that the plugin should come with Godot, but I believe this should stay as a plugin since most of the people making games won't be using it. I'm flattered by your comments but this will remain a plugin :)
🔷 Can I use C# with Dialogic?
You probably can, but I have no idea how to 😓. If you know your way around C# and Godot please let me know! https://github.com/coppolaemilio/dialogic/issues/55
Dialogic - 0.9
-
Video: https://youtu.be/pL0RWVmlM6g
-
Moved
Dialog.tscn
to the root of the addon so it is easier to find. -
Added a link to the documentation from the editor
-
Refactored a lot of the code and continued splitting the main plugin code into smaller pieces.
-
Rewrote most of the saving and branching systems.
-
New tool: Glossary Editor
- You are now able to write extra lore for any word and Dialogic will create a hover card with that extra information.
- You can create
strings
andnumber
variables. - You can access to those variables from the
Dialogic
Class:Dialogic.get_var('variable_name')
-
In game:
- Portraits changes are reflected in-game.
- Many small improvements.
-
Theme Editor:
- New default asset: Glossary Font
- Added new options to customize the glossary popup
-
Timeline Editor:
- Added categories for the events.
- Color coded some of the events in the same category to avoid having a distracting rainbow in the timelines.
- Conditional event working, but only with "equal to". More conditions coming later.
- Renamed the
End Branch
file names to match the name of the event. This will break the conditionals you have, but this is the time for making breaking changes. Sorry! - New
Set Value
event. Change the current value of a glossary variable inside a timeline. This will reset when you close the game, so a saving system will have to be added on the next version. - New
Emit Signal
event. This event will make the Dialog node emit a signal calleddialogic_signal
. You can connect this in a moment of your timeline with other scripts. - New
Change Scene
event. You can change the current Scene to whatever.tscn
you pick. This will happen instantly, but in the future I'll add some transition effects so it is not that abrupt. - New
Wait Seconds
event. This will hide the dialog and wait X seconds until continuing with the rest of the timeline. - Created independent Character and Portrait picker for reusing in event nodes.
- Portrait picker added to
Text Events
andCharacter Join
events. Text Events
text editor vertical size grows witch each line added.Text Events
now properly create a new message for each line inside the text editor.Text Events
Line count are now displayed next to the preview text when folded.- Re-adding the
End Branch
event just in case you removed the end and you want to add it again in the timeline. - Renamed the
Copy Timeline ID
right click menu option toCopy Timeline Name
since you now have to use that to set the current timeline from code instead of the ID. - Fixed several bugs that corrupted saved files
- Thanks to mindtonix and Crystalwarrior for your first contribution on the choice buttons
-
New
Dialogic
class. With this new class you can add dialogs from code easily:var new_dialog = Dialogic.start('Your Timeline Name Here') add_child(new_dialog)
To connect signals you can also do:
func _ready(): var new_dialog = Dialogic.start('Your Timeline Name Here') add_child(new_dialog) new_dialog.connect("dialogic_signal", self, 'signal_from_dialogic') func signal_from_dialogic(value): print(value)
Dialogic - 0.8
v0.8 - Dialog enters the game
- Video: https://youtu.be/NfTyRrsdB1I
- Moved the theme editor tool icon to the left
- Theme Editor:
- Added a color background as an option
- Reduced the vertical size needed to show all options
- Style your choice buttons! (Color, background, etc...)
- Better default support for unchanged styles
- Timeline Editor:
- Moved the event buttons to a new column
- When creating a
Question
twoChoice
events and aEnd Branch
event will be added automatically - Added a warning for
Choice
events on the root level of indentation - Disabled unfinished events
- The Change Timeline event tells you your current timeline (this is for going back to the start)
- New
Close Dialog
event. This event closes the dialog whenever it is called. - When renaming a dialog the popup's text field is already selected and focused.
- In game dialog:
- You can now select the current timeline from the inspector without manually copying the timeline id.
- Change timeline event is now working
- Audio event can play sounds
- Character join (left, center and right) working
- Focus in and out of portraits when speaking
- Character leave events working
- Basic question/answers support
- Better scene resizing and position
- Button styles
Dialogic - 0.7
v0.7 - Looking good
- Video: https://youtu.be/wREIVj55eBM
- New plugin tab icon
- Removed legacy files
- From the theme tab you can now:
- Pick the default text color
- Set the sadows and shadow offset
- Select your own fonts (.tres)
- Set background and next indicator images
- Choose an action to trigger the "next" event
- Preview changes in a dialog
- Change text speed
- Set text margins
- Characters tab
- Added context menu
- Moved the Remove Character button to a context menu
- You can open the working directory
- Timeline tab
- Added context menu
- You can remove timelines now
- Right click no longer renames timelines, to do so you have to use the new menu
- You can open the working directory
- You can copy the timeline ID
Dialogic - 0.6
v0.6 - Character portraits
- Video: https://youtu.be/okWYt_yGKNI
- Splitting the main script into smaller pieces
- Characters
- Characters welcome screen when there are 0
- Different display name
- Autosave enabled on characters
- Character portraits
- Added Default Speaker setting
- Events:
- Text block now has a portrait dropdown
Dialogic - 0.5
v0.5 - Indentation Magic
- Video: https://youtu.be/mrTyWy2TJOM
- Added new events:
- Choice
- End branch
- Change Timeline
- You can now drag and drop events in a timeline
- Made new icons for the editor tabs
- Added some tooltips
- Restructured the events node structure to add indentation
- Changed event default colors
Dialogic - 0.4
Merge branch 'version-0.4'