Candy Logo Copyright © 2025-2026 Candy Arts

Bubbles Mode
Bubbles mode displays the spoken text inside comic-style speech bubbles, on the speaker's own Actor node (sprite or mesh). There is no portrait or speaker label. Each Actor has their own speech bubble: the Engine searches for the speaker's node at bubbles_player_path (for Actors in the player_refs array) or bubbles_npc_path (for everyone else), followed by the Actor Reference, and displays the Line in the node listed as "Speech_Bubble" in its internal_node_dict. If the speaker has no node, or their node has no speech bubble, the Line is displayed in the bubbles_exempt_mode instead. When VN mode is enabled, Bubbles mode automatically switches to VN Bubbles mode, which uses the same settings.
Note: The Godot Editor may print this error when it loads a scene containing a speech bubble or a bark bubble: Path to node is invalid: 'SubViewport'. (or 'BarkBubble/SubViewport' for a bark scene). It's caused by the Godot editor loading the speech/bark bubbles ViewportTextures before Subviewports. Everything works correctly: you can ignore it.
Engine Settings The following settings are available in the Engine (Candy_Engine.gd):
SettingPurpose
bubbles_exempt_modeThe Dialogue Mode to use when the speaker has no speech bubble, or isn't present on screen.
bubbles_npc_pathThe path to the node containing NPC Actor nodes.
bubbles_player_pathThe path to the node containing player Actor nodes.
bubbles_text_bbcodeBBCode tags wrapped around the spoken text. Write the opening tags only: the Engine adds the closing tags.
bubbles_end_of_line_stringThe end-of-line string before advancing to the next Line.
bubbles_advance_stringThe end-of-line string after advancing to the next Line.
lexicon_bubbles_modeEnable Lexicon formatting in the spoken text.
writing_speedTypewriter speed, in characters per second. 0 displays the whole Line at once.
continue_fast_speedTypewriter speed while the speed-up input is held.
continue_slow_speedTypewriter speed while the slow-down input is held.
sync_write_speed_voiceMatch the typewriter's speed to the voice file's length. The synchronization is lost if the player accelerates or slows down the writing.
auto_advanceSeconds to wait before automatically advancing to the next Line. -1: Disable (manual advance only). 0: Advance immediately when writing is finished.
auto_advance_per_characterSeconds added to auto_advance for each character the Line displays (e.g. 0.05 adds 5 seconds to a 100-character Line). Ignored when auto_advance is -1.
enable_voicePlay voice files or TTS for Spoken Lines.
await_voice_playbackDisable advancing until voice playback has finished.
text_to_speechText-To-Speech: "Off": Don't use Text-To-Speech. "Simple": Use the spoken text (without BBCode tags) for Text-To-Speech. "Advanced": Use the _TTS Variation for Text-To-Speech. Additional TTS modes are created in the tts() hook function (Tts.gd).
tts_advanced_fallbackThe TTS mode to use instead of "Advanced" when a Line has no "_TTS" Variation. Without TTS modes of your own, the only values are "Simple" and "Off".
llm_modeQuery an LLM to write the text to display.
write_dialogue_historyLog Spoken Lines in the Dialogue History.
UI Settings The following settings are available in the speech bubble itself (Speech_Bubble_2D.gd or Speech_Bubble_3D.gd): Overrides Each of these replaces the Engine setting of the same purpose while its enable_ switch is on (e.g. enable_writing_speed):
SettingOverrides
text_bbcodebubbles_text_bbcode
end_of_line_stringbubbles_end_of_line_string
advance_stringbubbles_advance_string
lexicon_modelexicon_bubbles_mode
writing_speedwriting_speed
continue_fast_speedcontinue_fast_speed
continue_slow_speedcontinue_slow_speed
sync_write_speed_voicesync_write_speed_voice
auto_advanceauto_advance
auto_advance_per_characterauto_advance_per_character
enable_voiceenable_voice
await_voice_playbackawait_voice_playback
text_to_speechtext_to_speech
tts_advanced_fallbacktts_advanced_fallback
llm_modellm_mode
write_dialogue_historywrite_dialogue_history
Other
SettingPurpose
x_offsetThe bubble's offset on the X axis.
y_offsetThe bubble's offset on the Y axis.
z_offsetThe bubble's offset on the Z axis (3D only).
max_widthThe maximum width the bubble can reach.
text_width_marginExtra space on each side of the text.
default_zThe bubble's Z-order (2D only).
Actor Overrides The following overrides can be assigned to Actors (actors dictionary):
PropertyOverrides
BubblesExemptModebubbles_exempt_mode
BubblesTextBBCodebubbles_text_bbcode
BubblesEndOfLineStringbubbles_end_of_line_string
BubblesAdvanceStringbubbles_advance_string
LexiconBubblesModelexicon_bubbles_mode
DialogueModedialogue_mode
WritingSpeedwriting_speed
ContinueFastSpeedcontinue_fast_speed
ContinueSlowSpeedcontinue_slow_speed
SyncWriteSpeedVoicesync_write_speed_voice
AutoAdvanceauto_advance
AutoAdvancePerCharacterauto_advance_per_character
EnableVoiceenable_voice
AwaitVoicePlaybackawait_voice_playback
TTStext_to_speech
TTSAdvancedFallbacktts_advanced_fallback
LLMllm_mode
WriteDialogueHistorywrite_dialogue_history
Line Overrides The following overrides can be assigned to Spoken Lines:
KeyOverrides
Bubbles_Exempt_Modebubbles_exempt_mode
Text_BBCodebubbles_text_bbcode
End_Of_Line_Stringbubbles_end_of_line_string
Advance_Stringbubbles_advance_string
Lexicon_Modelexicon_bubbles_mode
Dialogue_Modedialogue_mode
Writing_Speedwriting_speed
Continue_Fast_Speedcontinue_fast_speed
Continue_Slow_Speedcontinue_slow_speed
Sync_Write_Speed_Voicesync_write_speed_voice
Auto_Advanceauto_advance
Auto_Advance_Per_Characterauto_advance_per_character
Enable_Voiceenable_voice
Await_Voice_Playbackawait_voice_playback
TTStext_to_speech
TTS_Advanced_Fallbacktts_advanced_fallback
LLMllm_mode
Write_Dialogue_Historywrite_dialogue_history