Candy Logo Copyright © 2025-2026 Candy Arts

Typewriter 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")
Disabling Input The Engine's input_enabled setting disables input entirely: when it's false, the Engine ignores input_slow_dialogue, input_speed_dialogue and input_skip_dialogue. To allow players to advance the Dialogue but not accelerate, slow down or skip the writing, leave these three settings empty instead. Changing the Writing Mid-Line A Line's writing speed can change partway through, and the writing can pause, with Text Events: markers in the text that run Commands when the typewriter reaches them. The Write_Speed and Write_Pause Commands exist for this:
"Text": "Let me think...‡pause‡ I've got it!"
Voice Synchronization The Engine's sync_write_speed_voice setting (in the Inspector, under the Writing category) fits the writing speed to the length of the voice file: when it's true, the Engine adjusts the writing speed so that the text finishes writing as the voice finishes playing. If the player accelerates or slows down the writing, the synchronization is lost: the Engine doesn't readjust it. After a Text Event, the Engine does readjust it by default, so a pause doesn't leave the text behind the voice (see Text Events). The Engine's sync_write_speed_voice 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.