Theatre

by nnda

43

Yet another (linear) dialogue system/addon/plugin for Godot. With features such as:

  • ✍️ Written in human-readable syntax.
  • 😐 ....
  • 📝 And 100% written in GDScript!
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."

(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:

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:

@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)

License

Version

0.9.0

Engine

4.3

Category

Scripts

Download

Version0.9.0
Download

Support

If you need help or have questions about this plugin, please contact the author.

Contact Author