godot-dialogue-system
Installation
SKILL.md
Dialogue System
Data-driven dialogue routing — not beginner typewriter tutorials.
NEVER Do in Dialogue Systems
- NEVER hardcode dialogue text in GDScript — Store lines in Resources / JSON / CSV so localization works.
- NEVER show choices the player has not unlocked — Hide (or intentionally gray) gated options.
- NEVER use unvalidated loose strings for node transitions — Typos in
next_node_idsoft-lock mid-convo; assert / registry IDs. - NEVER force a typewriter without skip — Click/confirm must finish the line immediately.
- NEVER drive reveal with per-character
Timer/OS.delay_msec()— Usevisible_ratio/visible_characters+ Tween (see typebox_effect.gd). - NEVER store dialogue cursor state only in the UI node — Scene changes drop the player; keep progress in the manager Autoload / session object.
- NEVER
get_node()from NPCs into Dialogue UI — Start via manager signals (start_dialogue(res)). - NEVER invent regex for BBCode — Prefer RichTextLabel BBCode / custom effects.
- NEVER save/load inside a dialogue node Resource — Nodes are data; persistence belongs to SaveSystem.
- NEVER hardcode portrait paths in code — Assign textures on node Resources or a portrait database.