Copyright © 2025-2026 Candy ArtsTypewriter Effect
The Typewriter Effect writes the spoken text progressively, character by character.
Engine Settings
The Engine's writing_speed setting, under the Writing category, configures the Typewriter Effect: its value is the number of characters written per second.
A value of 0 disables the Typewriter Effect: the full text is displayed instantly.
The Engine's writing_speed setting can be overridden by the UI Elements that display speech (dialogue box, subtitles...), by Actor properties (in the actors dictionary) and by Spoken Line data.
Player Inputs
Players can accelerate or slow down the writing, or skip it and display the full text instantly.
The Engine's input_speed_dialogue, input_slow_dialogue and input_skip_dialogue settings, under the Input category, name the input actions for these three controls.
By default, they name the Dialogue_Speed, Dialogue_Slow and Dialogue_Skip input actions (from the Input Map, in Project Settings).
The Wizard adds these input actions when it installs Candy Dialogue Engine, without assigning keys to them.
Assign the three actions different keys from one another. Their keys may be the same as the Dialogue_Advance action's, without conflict.
Input Writing Speeds
The Engine's continue_slow_speed and continue_fast_speed settings are the writing speeds, in characters per second, applied while input_slow_dialogue and input_speed_dialogue are held.
Both values may be higher or lower than the regular writing speed, which allows two speed-up inputs, or two slow-down inputs.
The Engine's continue_slow_speed and continue_fast_speed settings can be overridden by the UI Elements that display speech (dialogue box, subtitles...), by Actor properties (in the actors dictionary) and by Spoken Line data.
Non-Key Inputs
The Engine's input settings only accept input actions. To control the writing another way, such as with an on-screen button, press the action from code: connect the button's pressed() signal to a function like this one:
func _on_speed_button_pressed() -> void:
Input.action_press("Dialogue_Speed")
await get_tree().process_frame
Input.action_release("Dialogue_Speed")"Text": "Let me think...‡pause‡ I've got it!"