
Publisher
nnda
Theatre
Yet another (linear) dialogue system/addon/plugin. Written in human-readable plain text. Compatible with Godot 4.3. Official documentation: https://nndda.github.io/Theatre 0.9.0 changelog: https://github.com/nndda/Theatre/releases/tag/0.9.0
This plugin has been mirrored from the Godot Asset Library.
The plugin author is in no way affiliated with Gadget.
If you are the author of this plugin and would like this mirror removed, please contact support@gadgetgodot.com.
Theatre
Yet another (linear) dialogue system/addon/plugin for Godot. With features such as:
✍️ Written in human-readable syntax.
😐 ....
📝 And 100% written in GDScript!
Rendered
Written
Dia:
"Welcome! {d=0.8}to the
[fx1]Theatre[/fx1]!
d=0.9
yet another text-based dialogue addon
d=0.3
developed for Godot {gd_ver}."
\(^ ▽ ^)
[!IMPORTANT] This project is still in development and is subject to frequent breaking changes, and bugs. Check out the Issues page for known bugs & issues, and Common Troubleshooting documentation page if you encounter any issues.
Features
Dialogue Tags
Fine-tune your dialogue flow with {delay}
and {speed}
.
Godette:
"Hello!{delay = 0.7} Nice to meet you."
Set Properties
Manipulate properties & variables.
Ritsu:
UI.portrait = "ritsu_smile.png"
"Cheers!"
Call Functions
Connect your story to the game with function calls.
{player}:
Player.heal(20)
"Thanks! That feels so much better."
Call functions or set properties/variables only at specific points in the Dialogue.
Dia:
"Let's brighten up the room a little...{d = 1.1}
Background.set_brightness(1.0)
# or
Background.brightness = 1.0
there we go."
📚 More comprehensive Dialogue features documented here.
(Very) Quick Start
Write your epic Dialogue!
# Write it in a *.dlg file, and load it.
var epic_dialogue = Dialogue.load("res://epic_dialogue.dlg")
# Write it directly with triple quotation marks.
var epic_dialogue = Dialogue.new("""
Dia:
"Loading the Dialogue written in a *.dlg file
is much better for performance."
:
"It'll keep things clean and efficient."
:
"Plus, you’ll have syntax highlighting
for better readability."
""")
Set the Stage! Add Stage
and DialogueLabel
node to your scene. Structure your scene like the following:
VBoxContainer > Label, DialogueLabel" width="207" height="302">
Adjust the position and size of the PanelContainer
to your liking.
Select the Stage
node, and reference the Label
& DialogueLabel
node to display your Dialogue. Adjust and configure your Stage
via the inspector. Alternatively, you can also set them in script:
Inspector
GDScript
@onready var my_stage : Stage = $Stage
func _ready():
my_stage.actor_label =\
$PanelContainer/VBoxContainer/Label
my_stage.dialogue_label =\
$PanelContainer/VBoxContainer/DialogueLabel
my_stage.allow_skip = true
my_stage.allow_cancel = true
my_stage.allow_func = true
my_stage.speed_scale = 1.0
Reference the Stage
node in the script, and set up a way to progress your Dialogue with Stage.progress()
.
func _input(event):
if event.is_action_pressed("ui_accept"):
my_stage.progress()
And finally, start the Stage
with your epic_dialogue
.
func _ready():
my_stage.start(epic_dialogue)
📚 More detailed quick start tutorial here.
License
- Theatre is licensed under MIT.
- Theatre logo, created by nnda, is licensed under CC-BY 4.0.
- Class icons from @fontawesome (recolored), are licensed under CC-BY 4.0.