Edit of asset "DDSL" Accepted

Old/Current New/Edit
Title DDSL DDSL
Description DDSL is a dialogue manager plugin for [Godot 4.6+](https://godotengine.org/), primarily focusing on snippet-like conversations and integration with the GDScript system

Source code and latest versions on [Github](https://github.com/zHoeshin/DDSL)

## Basic usage
Dialogue 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
```ddsl
edwin = ^"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")
```

Information about the domain-specific language can be found on the [wiki](https://github.com/zHoeshin/DDSL/wiki/...)

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 set
Dialog.setBox(someDialogBoxScene)

# The main way the dialogues can interact with GDScript is via explicit object bindings
# Global bindings are permanent between all dialogue calls
Dialog.bindGlobal(InventoryManager, "Inventory")

# This will start the dialogue without blocking current execution, executing _dialog_callback after the dialogue finishes
Dialog.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 execution
var vars = await Dialog.start("res://path/to/dialog.ddsl")
```

Full usage instructions can be found in the [wiki](https://github.com/zHoeshin/DDSL/wiki/...)

## Features
- Integration with GDScript, including native calls to built-in methods
- Operator overloading possible within the DSL
- Unboundedly nested branching options without forced use of `goto` statements

## Documentation
The documentation for the plugin is hosted on the [Github Wiki](https://github.com/zHoeshin/DDSL/wiki) of the repository
DDSL is a dialogue manager plugin for [Godot 4.6+](https://godotengine.org/), primarily focusing on snippet-like conversations and integration with the GDScript system

Source code and latest versions on [Github](https://github.com/zHoeshin/DDSL)

## Basic usage
Dialogue 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
```ddsl
edwin = ^"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")
```

Information about the domain-specific language can be found on the [wiki](https://github.com/zHoeshin/DDSL/wiki/...)

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 set
Dialog.setBox(someDialogBoxScene)

# The main way the dialogues can interact with GDScript is via explicit object bindings
# Global bindings are permanent between all dialogue calls
Dialog.bindGlobal(InventoryManager, "Inventory")

# This will start the dialogue without blocking current execution, executing _dialog_callback after the dialogue finishes
Dialog.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 execution
var vars = await Dialog.start("res://path/to/dialog.ddsl")
```

Full usage instructions can be found in the [wiki](https://github.com/zHoeshin/DDSL/wiki/...)

## Features
- Integration with GDScript, including native calls to built-in methods
- Operator overloading possible within the DSL
- Unboundedly nested branching options without forced use of `goto` statements

## Documentation
The documentation for the plugin is hosted on the [Github Wiki](https://github.com/zHoeshin/DDSL/wiki) of the repository
Category Misc Misc
License Apache-2.0 Apache-2.0
Repository Provider GitHub GitHub
Repository Url https://github.com/zHoeshin/DDSL https://github.com/zHoeshin/DDSL
Issues Url https://github.com/zHoeshin/DDSL/issues https://github.com/zHoeshin/DDSL/issues
Godot version Godot 4.6 Godot 4.6
Version String 1.2.1 1.2.1
Download Commit d0bcfda426dc133f46ae0d52eb8396e16a76cb20 d0bcfda426dc133f46ae0d52eb8396e16a76cb20
Download Url (Computed) https://github.com/zHoeshin/DDSL/archive/d0bcfda426dc133f46ae0d52eb8396e16a76cb20.zip https://github.com/zHoeshin/DDSL/archive/d0bcfda426dc133f46ae0d52eb8396e16a76cb20.zip
Icon Url https://raw.githubusercontent.com/zHoeshin/DDSL/refs/heads/main/examples/images/icon.png
https://raw.githubusercontent.com/zHoeshin/DDSL/refs/heads/main/examples/images/icon.png
Preview Insert
Type image
Image/Video URL https://raw.githubusercontent.com/zHoeshin/DDSL/refs/heads/main/examples/images/script1.png
Thumbnail
Preview Insert
Type image
Image/Video URL https://raw.githubusercontent.com/zHoeshin/DDSL/refs/heads/main/examples/images/preview1.png
Thumbnail