DialogueDSL is a dialogue manager plugin for [Godot 4.6+](https://godotengine.org/), primarily focusing on snippet-like conversations and integration with the GDScript systemSource code and latest versions on [Github](https://github.com/zHoeshin/DDSL)## Features- built-in syntax highlighting for `.ddsl` dialogue scripts- translation support- no dependencies- integration with GDScript- simple interface for creating dialogue UI- custom input types creation- structured branching over jumping## Basic usageDialogue scripts can be created anywhere within the game's project folder. For this, create a text file, and end it with `.ddsl`, then fill it with the dialogue, for example```ddsledwin = ^"res://sprites/portraits/edwin.png"edwin: "Hello, little rover. Are you lost?" { autoconfirm = true }<- option- "Yes" edwin: "Oh, well, we can't have that here. Come, follow me" Cutscenes.trigger("edwinTavernWalk")- "No" edwin: "Are you sure? Well, then... Hope this helps you in your journey" Inventory.add("potion/health2") edwin: "If you need me, you can find me in my tavern"- "Kill all humans" ? Inventory.has("weapon/knife") # this branch is not created unless the player has a knife edwin: "Why, why, so aggressive! And here I thought you were a friendly little roomba!" edwin: "I say, you shouldn't have this" Inventory.remove("weapon/knife") edwin: "Are you even old enough to have a knife? When were you born?" age <- number(1980, 10000) ? Time.get_time_dict_from_system()["year"] < age edwin: "A time traveller too? I find it hard to believe." edwin: "I think you should come with me" Cutscenes.trigger("edwinTavernWalk")```Note that the language focuses on programmer-styled dialogue description rather than a writer-style one. It is also not intended for creating monolithic dialogues carrying the entire story(i.e. it is not made for visual novels)Once a dialogue file is created, it can be executed in-game in two primary ways```gdscript# Note that there is no default dialogue box provided so Dialogue will error during execution if one is not explicitly setDialog.setBox(someDialogBoxScene)# The main way the dialogues can interact with GDScript is via explicit object bindings# Global bindings are permanent between all dialogue callsDialog.bindGlobal(InventoryManager, "Inventory")# This will start the dialogue without blocking current execution, executing _dialog_callback after the dialogue finishesDialog.start("res://path/to/dialog.ddsl", null, _dialog_callback)# Current execution will be paused for the duration of the dialogue# `value` will be assigned to a dictionary containing all variables created during script executionvar vars = await Dialog.start("res://path/to/dialog.ddsl")```## DocumentationThe documentation for the plugin is hosted on the [Github Wiki](https://github.com/zHoeshin/DDSL/wiki) of the repository