thedivergentai/godot-dialogue-system
Expert patterns for branching dialogue systems including dialogue graphs (Resource-based), character portraits, player choices, conditional dialogue (flags/quests), typewriter effects, localization support, and voice acting integration. Use for narrative games, RPGs, or visual novels. Trigger keywords: DialogueLine, DialogueChoice, DialogueGraph, dialogue_manager, typewriter_effect, branching_dialogue, dialogue_flags, localization, voice_acting.
npx skills add https://github.com/thedivergentai/GD-Agentic-Skills --skill godot-dialogue-system
Data-driven dialogue routing — not beginner typewriter tutorials.
next_node_id soft-lock mid-convo; assert / registry IDs.Timer / OS.delay_msec() — Use visible_ratio / visible_characters + Tween (see typebox_effect.gd).get_node() from NPCs into Dialogue UI — Start via manager signals (start_dialogue(res)).add_image/update_image use width_unit/height_unit (ImageUnit) — update portrait and inline image helpers.| Authoring need | Engine | MANDATORY scripts | Do NOT Load |
|----------------|--------|-------------------|-------------|
| Designer-friendly .tres graphs in-repo | Resource Autoload graph | dialogue_resource.gd → dialogue_manager_singleton.gd → dialogue_ui_controller.gd → typebox_effect.gd | dialogue_engine.gd JSON path |
| External writers / spreadsheet → JSON | JSON graph engine | dialogue_engine.gd (+ optional dialogue_manager.gd) → UI + typebox | Resource Autoload stack |
| Visual node editor in-project | GraphEdit authoring | Keep runtime on Resource or JSON export; GraphEdit is editor-only tooling | Shipping GraphEdit as the runtime walker |
| Conditions / quest gates | Either | branching_condition_validator.gd | Embedding flag checks in UI buttons |
| Portraits / expressions | Either | dialogue_portrait_manager.gd | — |
| Localization keys | Either | localized_dialogue_resource.gd | Hardcoded language if trees |
| Quest / gameplay hooks from lines | Either | dialogue_event_bridge.gd | Side effects inside UI controller |
Default golden path: Resource Autoload → UI controller → typebox_effect. Pick one runtime engine; do not run Resource manager and JSON engine in parallel.
visible_ratio reveal[trigger:] tags@tool GraphEdit auditor (editor-only)Use typebox_effect.gd: set full text, tween visible_ratio (or RichTextLabel visible_characters) from 0→1. On skip input: kill tween and snap visibility to complete. Do not spawn a Timer per character.
@tool) — export to Resource/JSON for runtime.[CHOICE] log prefix; no PII.> MANDATORY for GraphEdit tooling, TTS/lipsync, analytics, and moved inline manager/UI tutorials: elite-dialogue-patterns.md. Do NOT Load for Resource Autoload golden path only.
> Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain — do not preload the whole lattice.
Resource / .tres data instead of hardcoded strings in scripts.visible_characters / image helpers and BBCode APIs the dialogue UI should drive for typewriter and portraits.tr() / TranslationServer workflow so line text stays key-based across locales.text_key fields.DialogueManager that survives scene changes and owns traversal state.visible_ratio / character reveal timing without blocking the main thread.DisplayServer TTS callbacks for placeholder VO and lipsync-adjacent timing..tres lists become unwieldy.await, and Callables required before branching engines and UI bridges.DialogueLine / graph Resources, exports, and avoiding duplicated mutable state.DialogueManager that must outlive scene swaps.line_displayed, choice selection, and narrative event bridges.Take thedivergentai/godot-dialogue-system from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.