Copyright © 2025-2026 Candy ArtsBox Mode
Box mode displays the spoken text inside an RPG-style dialogue box, with a portrait and a speaker label.
Engine Settings
The following settings are available in the Engine (Candy_Engine.gd):
| Setting | Purpose |
| box_portrait_mode | The logic for displaying the speaker's portrait: "Off": Display no portrait. "All": Display a portrait for every speaker. "Player": Display a portrait only when the Actor is in the player_refs array (Player_Refs.gd). "NPC": Display a portrait only when the Actor is NOT in the player_refs array (Player_Refs.gd). "VN": Display no portrait when the Actor has a VN bust on screen. |
| box_text_bbcode | BBCode tags wrapped around the spoken text. Write the opening tags only: the Engine adds the closing tags. |
| box_speaker_bbcode | BBCode tags wrapped around the speaker name. Write the opening tags only: the Engine adds the closing tags. |
| box_show_speaker | Write the speaker's name at the start of the spoken text. |
| box_speaker_prefix | Text added before the speaker's name, when box_show_speaker is true. |
| box_speaker_suffix | Text added after the speaker's name, when box_show_speaker is true. |
| box_end_of_line_string | The end-of-line string before advancing to the next Line. |
| box_advance_string | The end-of-line string after advancing to the next Line. |
| box_self_clear | Clear the dialogue box when dialogue advances to the next Line. |
| box_portrait_self_clear | Clear the portrait when dialogue advances to the next Line. |
| lexicon_box_mode | Enable Lexicon formatting in the spoken text. |
| writing_speed | Typewriter speed, in characters per second. 0 displays the whole Line at once. |
| continue_fast_speed | Typewriter speed while the speed-up input is held. |
| continue_slow_speed | Typewriter speed while the slow-down input is held. |
| sync_write_speed_voice | Match the typewriter's speed to the voice file's length. The synchronization is lost if the player accelerates or slows down the writing. |
| auto_advance | Seconds to wait before automatically advancing to the next Line. -1: Disable (manual advance only). 0: Advance immediately when writing is finished. |
| auto_advance_per_character | Seconds 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_voice | Play voice files or TTS for Spoken Lines. |
| await_voice_playback | Disable advancing until voice playback has finished. |
| text_to_speech | Text-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_fallback | The 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_mode | Query an LLM to write the text to display. |
| write_dialogue_history | Log Spoken Lines in the Dialogue History. |
| default_image_extension | Default file extension to use when an image file name is provided without one. |
| default_sprite_extension | Default file extension to use when a spritesheet file name is provided without one. |
| default_animated_sprite_extension | Default file extension to use when a SpriteFrames file name is provided without one. |
| default_video_extension | Default file extension to use when a video file name is provided without one. |
| default_animated_image_fps | Default frame rate to use for frame-folder animations. |
| default_sprite_fps | Default frame rate to use for Sprite2D/3D animations. |
| default_animated_sprite_fps | Default frame rate to use for SpriteFrames animations saved with no speed of their own. |
| default_video_fps | Frame rate a Portrait_Stop frame counts at, for videos whose frame rate can't be read. |
| animation_folder_cache | Memory budget (MB) for animation folders. |
| animation_folder_stream | How many frames to load while an animation folder is streamed. |
| Setting | Overrides |
| portrait_mode | box_portrait_mode |
| text_bbcode | box_text_bbcode |
| speaker_bbcode | box_speaker_bbcode |
| show_speaker | box_show_speaker |
| speaker_prefix | box_speaker_prefix |
| speaker_suffix | box_speaker_suffix |
| end_of_line_string | box_end_of_line_string |
| advance_string | box_advance_string |
| self_clear | box_self_clear |
| portrait_self_clear | box_portrait_self_clear |
| lexicon_mode | lexicon_box_mode |
| writing_speed | writing_speed |
| continue_fast_speed | continue_fast_speed |
| continue_slow_speed | continue_slow_speed |
| sync_write_speed_voice | sync_write_speed_voice |
| auto_advance | auto_advance |
| auto_advance_per_character | auto_advance_per_character |
| enable_voice | enable_voice |
| await_voice_playback | await_voice_playback |
| text_to_speech | text_to_speech |
| tts_advanced_fallback | tts_advanced_fallback |
| llm_mode | llm_mode |
| write_dialogue_history | write_dialogue_history |
| Setting | Purpose |
| default_image_extension | Extension appended to portrait files named without one (TextureRect, NinePatchRect, TextureButton). |
| default_sprite_extension | Extension appended to spritesheet files named without one (Sprite2D, Sprite3D). |
| default_animated_sprite_extension | Extension appended to SpriteFrames files named without one (AnimatedSprite2D, AnimatedSprite3D). |
| default_video_extension | Extension appended to video files named without one (VideoStreamPlayer). |
| default_animated_image_fps | Frame rate of frame-folder animations (TextureRect, NinePatchRect). |
| default_sprite_fps | Frame rate of spritesheets (Sprite2D, Sprite3D). |
| default_animated_sprite_fps | Frame rate of SpriteFrames animations saved with no speed of their own. |
| default_video_fps | Frame rate a Portrait_Stop frame counts at, for videos whose frame rate can't be read. |
| animation_folder_cache | Memory budget (MB) of one animation folder: one that fits stays loaded, one that doesn't is streamed. |
| animation_folder_stream | How many frames are loaded ahead while an animation folder is streamed. |
| portrait_w | The width Sprite2D and Sprite3D portraits are scaled to. |
| portrait_h | The height Sprite2D and Sprite3D portraits are scaled to. |
| Setting | Purpose |
| default_z | The dialogue box's Z-order. |
| Property | Overrides |
| BoxPortraitMode | box_portrait_mode |
| BoxTextBBCode | box_text_bbcode |
| BoxSpeakerBBCode | box_speaker_bbcode |
| BoxShowSpeaker | box_show_speaker |
| BoxSpeakerPrefix | box_speaker_prefix |
| BoxSpeakerSuffix | box_speaker_suffix |
| BoxEndOfLineString | box_end_of_line_string |
| BoxAdvanceString | box_advance_string |
| BoxSelfClear | box_self_clear |
| BoxPortraitSelfClear | box_portrait_self_clear |
| LexiconBoxMode | lexicon_box_mode |
| DialogueMode | dialogue_mode |
| WritingSpeed | writing_speed |
| ContinueFastSpeed | continue_fast_speed |
| ContinueSlowSpeed | continue_slow_speed |
| SyncWriteSpeedVoice | sync_write_speed_voice |
| AutoAdvance | auto_advance |
| AutoAdvancePerCharacter | auto_advance_per_character |
| EnableVoice | enable_voice |
| AwaitVoicePlayback | await_voice_playback |
| TTS | text_to_speech |
| TTSAdvancedFallback | tts_advanced_fallback |
| LLM | llm_mode |
| WriteDialogueHistory | write_dialogue_history |
| Key | Overrides |
| extension | The extension settings (default_image_extension, default_sprite_extension, default_animated_sprite_extension, default_video_extension). |
| fps | The frame rate settings (default_animated_image_fps, default_sprite_fps, default_animated_sprite_fps, default_video_fps). |
| cache | animation_folder_cache |
| stream | animation_folder_stream |
| Files | Settings for one file each, named as it is in the folder: fps, cache and stream override the folder's own. |
extension = png
fps = 12
Files: {
sprite_sheet_4x2-1.png: {fps = 8}
}
A frame-folder animation can also contain its own config.txt, with a single fps = <number> line.
Line Overrides
The following overrides can be assigned to Spoken Lines:
| Key | Overrides |
| Portrait_Mode | box_portrait_mode |
| Text_BBCode | box_text_bbcode |
| Speaker_BBCode | box_speaker_bbcode |
| Show_Speaker | box_show_speaker |
| Speaker_Prefix | box_speaker_prefix |
| Speaker_Suffix | box_speaker_suffix |
| End_Of_Line_String | box_end_of_line_string |
| Advance_String | box_advance_string |
| Self_Clear | box_self_clear |
| Portrait_Self_Clear | box_portrait_self_clear |
| Lexicon_Mode | lexicon_box_mode |
| Dialogue_Mode | dialogue_mode |
| Writing_Speed | writing_speed |
| Continue_Fast_Speed | continue_fast_speed |
| Continue_Slow_Speed | continue_slow_speed |
| Sync_Write_Speed_Voice | sync_write_speed_voice |
| Auto_Advance | auto_advance |
| Auto_Advance_Per_Character | auto_advance_per_character |
| Enable_Voice | enable_voice |
| Await_Voice_Playback | await_voice_playback |
| TTS | text_to_speech |
| TTS_Advanced_Fallback | tts_advanced_fallback |
| LLM | llm_mode |
| Write_Dialogue_History | write_dialogue_history |