A custom visual scripting tool for authoring branching NPC conversations in Unreal Engine, built for an in-development alchemy life simulation game where relationships and shop management drive progression. Traditional dialogue systems often separate conversation flow from game logic, requiring designers to coordinate between multiple tools or rely on programmer support for anything beyond basic text. The goal behind this custom node graph editor was to combine everything into a single visual workspace that didn't require navigating dozens (or hundreds) of nested dropdowns as would be necessary in a typical data asset workflow.
Conversations are built by connecting typed nodes, each serving a specific purpose. Dialogue nodes display speaker portraits, support voice-over mappings, and branch into player choices—each choice optionally gated by conditions the player must meet. Entry nodes use a priority system to select the most appropriate conversation starter. An NPC might have a dozen entry points, but the system will choose the highest-priority entry whose conditions match the current game state. Action nodes let dialogue directly affect the world: give items, grant or complete quests, adjust NPC relationships, set progression flags, or emit custom events with typed payloads. These execute inline and auto-advance, keeping the flow readable. Branch nodes handle conditional logic within a conversation, routing to different paths based on the same flexible condition system used elsewhere.
The system stores all node types in a single polymorphic array of FInstancedStruct. Rather than hardcoding interactions between systems, action nodes communicate through a central event bus with typed payloads. This loose coupling means new game systems can react to dialogue events without needing to modify dialogue code, and designers can emit arbitrary events for cases the specialized nodes don't cover.