A dialogue engine for Godot. See docs for more info.
- Scripting language with highlighter and autocomplete.
BBCode Evolved®
with Markdown features.- Custom data format, inspired by YAML.
- Built with modding support in mind.
- Various translation systems and tools.
- Robust save system with no setup.
See docs.
Don't worry about remember keywords, as Sooty has autocomplete for:
- BBCode
- Functions
- States
- Even resources, like music
Char | Description | Example |
---|---|---|
~ |
State expression. | ~score += pow(my_power(), 2) Is equivalent to: State.score += pow(State.my_power(), 2) |
$ |
State function shortcut. | $player.damage 10 type:water Is equivalent to: State.player.damage(10, {"type":"water"}) |
@ |
Group function shortcut. | @camera.shake false y:0.5 Is equivalent to: get_nodes_in_group("camera").shake(false, {"y":0.5}) |
Function shortcuts are bracket-less ()
and comma-less ,
except for arrays:
$reset player,john,mary 100 health,exp
Is equivalent to:
State.reset(["player", "john", "mary"], 100, ["health", "exp"])
See docs.
Basic match
statements work, with support for arrays and dicts comming.
See docs.
Everything is treated as a mod. res://
is loaded as if it were a mod.
The system was designed with modding/expansions/patches/translations in mind.
Inside a mod
directory can be directories for:
Folder | File type(s) | Desc |
---|---|---|
dialogue/ |
.soot |
Dialogue files. |
lang/ |
.sola |
Translation files. |
states/ |
.gd .soda |
Node scripts or data files. |
persistent/ |
.gd .soda |
Node scripts or data files. |
scenes/ |
.tscn .scn |
Main scenes, with unique names. |
audio/music/ |
.wav .mp3 .ogg |
Music. |
audio/sfx/ |
.wav .mp3 .ogg |
Sound effects. |
User mods can have their own folder in user://mods
.
Notice the Visual Novel system treats itself as a "mod".
See docs.
Script names are used internally as the Dialogue
id. They contain Flows, which start with ===
.
=>
Goto flow.==
Run flow, then continue from here.><
Ends the current flow.>><<
End all flows.__
Pass. Does nothing. But has it's uses.
#my_story.soot
=== START
Once upon a time.
=> chapter_1
=== chapter_1
There lived a dog.
=> other_chapters.chapter_2
#other_chapters.soot
=== chapter_2
The dog was a fast runner.
See docs.
You can generate .sola
files for translating text.
It's becoming a robust system.
It can handle replacing multiple lines with 1 or 1 line with mutiple.
And if lines are removed, they won't be lost or erased from the .sola file.
test.soot |
test-fr.sola |
---|---|
See docs.
Sooty has a custom file format inspired by YAML, but designed for Godot.
It has a built in highlighter, and works in Godot's main editor.
An alternative FileSystem, that let's you go to specific lines and view how .soot
files are connected.
Currently files have to be manually opened in editor once before they can be opened with TreeView.
Make sure to include *.soot
*.soda
*.sola
files when building.