Skip to content
/ Theatre Public

🎭 Yet another Godot dialogue addon. Using human-readable plain text, and focused on presentation and delivery. Compatible with Godot 4.3.

License

Notifications You must be signed in to change notification settings

nndda/Theatre

Repository files navigation

Theatre

Text-based linear dialogue system for Godot 4.3.

  • ✍️ Written in human-readable syntax.
  • ✨ Focused on presentation and delivery of your story.
  • 📝 100% written in GDScript.

Important

This project is still in development, and is subject to frequent and breaking changes, and bugs.

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}."


    \(^ ▽ ^)

Features

Dialogue tags

Fine-tune your dialogue flow with {delay} and {speed}.

Godette:
    "Hello!{delay = 0.7} nice to meet you"
Godette:
    "Hello!
        delay=0.7
    nice to meet you"

Function calls

Connect your story to the game with function calls.

{player_name}:
    "Thanks! that feels so much better"

    Player.heal(20)
Ritsu:
    "Cheers!"

    Portrait.set("ritsu_smile.png")

Call functions only at specific points in the Dialogue.

Dia:
    "
    Let me brighten up the room a little...{d = 1.1}
    {0}
    there we go.
    "

# Call this function using its index: {0}
    Background.set_brightness(1.0)

Quick Start

Write your epic Dialogue!

# write it directly with triple quotation marks
var epic_dialogue = Dialogue.new("""

Dia:
    "For performance reason, I'd recommend
    using the method below instead."

""")

# alternatively, write it in a *.dlg.txt or *.dlg  file, and load it
var epic_dialogue = Dialogue.load("res://epic_dialogue.dlg")

Set the Stage! Create a 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 = $Label
    my_stage.dialogue_label = $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

func _ready():
    my_stage.start(epic_dialogue)

More detailed quick start tutorial here

License

About

🎭 Yet another Godot dialogue addon. Using human-readable plain text, and focused on presentation and delivery. Compatible with Godot 4.3.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project