Thanks to visit codestin.com
Credit goes to github.com

Skip to content
/ Theatre Public

๐ŸŽญ Yet another (linear) dialogue system/addon/plugin for Godot. Written in human-readable plain text.

License

Notifications You must be signed in to change notification settings

nndda/Theatre

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Theatre logoย  Theatre

Theatre logo

Godot 4.5 or above Build status Documentation build

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

  • โœ๏ธ Text-based, human-readable syntax.
  • โšก Simple setup. Get started in just 7 lines of codes!
  • ๐Ÿ˜ ....
  • ๐Ÿ“ And 100% written in GDScript!
Rendered Written
Theatre in action Theatre Dialogue script
# Load your epic dialogue!
var epic_dialogue := Dialogue.load('res://epic_dialogue.dlg')
# Set up the stage
@export var my_stage: TheatreStage

func _ready():
    # Start your dialogue
    my_stage.start(epic_dialogue)

func _input(event):
    # When the space/enter key is pressed,
    if event.is_action_pressed('ui_accept'):
        # Progress your dialogue
        my_stage.progress()

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.


Installation

Run the command below in your Godot project directory. Or download and install it manually.

curl -L 'https://nnda.dev/theatre/latest' | tar zxv --strip-components=1

The URL above is just a redirect to the main branch tarball :p


Features

Variables & Expressions

Insert static...

Dia:
    "Let's meet {player}. Don't keep {player_pronoun} waiting."

...or dynamic variables.

Execute, evaluate, and insert any valid GDScript expressions to the dialogue.

Ritsu:
    "HEY {( Player.name.to_upper() )}!!"
Dia:
    "Your operating system is {( OS.get_name() )}.
    It is currently {( Time.get_time_string_from_system(false) )}."

Dialogue Tags

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

Godette:
    "Hello!{delay = 0.7} Nice to meet you."
Ritsu:
    "{speed = 1.5} AAAAAAAAAAAAAAAAA!!!!"

Manipulate Properties

Manipulate in-game object properties & variables.

Ritsu:
    UI.portrait = "ritsu_smile.png"
    "Cheers!"
Ritsu:
    Global.friendship_lv += 1
    "Yay!"

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 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 TheatreStage and DialogueLabel node to your scene. Structure your scene like the following:

A scene tree, with Stage and PanelContainer

Adjust the position and size of the PanelContainer to your liking.

Select the TheatreStage node, and reference the Label & DialogueLabel node to display your Dialogue. Adjust and configure your TheatreStage via the inspector. Alternatively, you can also set them in script:

Inspector GDScript
Inspector dock's representation of Stage's properties.
@onready var my_stage: TheatreStage = $TheatreStage

func _ready():
    my_stage.actor_label =\
        $PanelContainer/VBoxContainer/Label
    my_stage.dialogue_label =\
        $PanelContainer/VBoxContainer/DialogueLabel

Reference the TheatreStage node in the script, and set up a way to progress your Dialogue with TheatreStage.progress().

func _input(event):
    if event.is_action_pressed('ui_accept'):
        my_stage.progress()

And finally, start the TheatreStage with your epic_dialogue.

func _ready():
    my_stage.start(epic_dialogue)

๐Ÿ“š More detailed quick start tutorial here.

License

About

๐ŸŽญ Yet another (linear) dialogue system/addon/plugin for Godot. Written in human-readable plain text.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Contributors 3

  •  
  •  
  •