
Dialogue System V.2
Custom Made System
Introduction
My dialogue system is a dynamic branching conversation system inspired by Fallout: New Vegas. Initially created for an assignment, it has evolved into a something more and designed to work independently without external feature packs or asset libraries.
The goal of this system is to offer an interactive, engaging way for players to interact with NPCs, moving beyond static dialogue. It is built with scalability in mind, offering a foundation for future expansion and enhancement.
Although still a work in progress, the system is fully functional and provides a robust framework for engaging NPC interactions. I am continuing to refine and expand its features to align with my vision of a polished, finished system.
Breakdown
-
Solo project spanning three weeks half speed
-
Unreal Engine 5
-
Custom user interface UI
-
All scripts are made by me
Features
-
Unlockable dialogue paths
-
Skill checks
-
Skip Dialogue texts
-
Call events
-
Allows formatted text and rich text
-
Allows dialogue audio
-
Switch between different dialogues on go
-
Focus camera for added immersion
VIDEO DEMONSTRATION

OVERVIEW
Breakdown
My dialogue system is a branching conversation system inspired by Fallout: New Vegas. It started as a simple mechanic for an assignment but quickly evolved into something much more ambitious. The goal is to create an interactive and dynamic way for players to engage with NPCs beyond static dialogue.
The dialogue system is built using Unreal Engine 5’s Blueprint system, with data tables storing dialogue entries, choices, and responses. The system allows dynamic branching, letting conversations shift based on player choices. While it’s easy to use, its layered structure can make complex dialogue trees difficult to manage, which is something I’m looking to improve.
How It Works
Each unedited conversation is structured in a data table, with a data asset handling runtime storage to allow seamless saving and retrieval. Using data assets instead of data tables during runtime is crucial, as data tables only provide copies of itself and aren’t designed for rapid updates.
A Blueprint component is added to NPCs, where you can assign data tables, set custom event triggers, and define NPC names displayed in dialogue. The system tracks dialogue using unique IDs to navigate conversation flow. When interacting with an NPC, the system retrieves the initial conversation, plays the corresponding sound cue, and presents dialogue options after the NPC speaks. Players can then select a response, which directs them to the appropriate conversation ID.
Skill checks can be applied to player responses, requiring a specific skill value (e.g., Persuasion, Intimidation). If the player’s skill is too low, the conversation branches to a failure dialogue; otherwise, it follows the intended path.
The system also allows players to return to previous conversations, skipping NPC text, with used options grayed out for clarity. Additionally, dialogue can be skipped at any time—though this feature is still a work in progress. Certain choices can also unlock new dialogue options dynamically.
BLUEPRINT FUNCTIONS
Here are some snippets over some vital functions inside the system. These functions are not the final representation and are subject to change during the development.
Event Graph
In the event graph of the component things like start interaction and end interaction is here as interface functions to set up the conversation before starting.
Another function here is the "On Pressed" function which gets called when the player presses a button, when it is their turn, this will start functions to calculate the skill check (if there were any) and unlock other dialogue choices. Here the system can switch to other data assets to start or continue other conversations.
Lastly there is a dialogue length function which intakes the text character length and make a delay with that. This lets the player read the text easily.
Create Conversation Text
This function is used to get the NPCs text and display it on the screen. It does this by looping through the whole text indexes till it gets to an invalid one and then will transfer to the next function - players turn. Other functions like playing audio and setting the text display length gets also called here.
Check Players Turn
This function exists to handle some actions before it is actually the players turn. It is here we call events which are set to happen on this specific part of the dialogue. This function also switches data asset if needed.
Players Turn
Inside this function is where the players response for the specific NPC dialogue gets created. The responses are widgets which are each their own button, this function works to transfer the necessary information to each button, like if they should be grayed out or even locked.
PROGRESS
Right now, I’m in the process of adding a skip NPC text readout function. This function allows the player to skip what the NPC says and go right into choosing a dialogue Option. To help the player keep track of what was last said by the NPC, I’ve added a bar above the player’s choices that displays the last NPC line.
The problem I’m currently facing is that when the player uses the function to skip the NPC text, they immediately move on to choosing their response as intended. However, after selecting a dialogue option, the next NPC’s text becomes invisible for the remainder of conversation even if the player does not want to skip it. This issue is important to fix as it is a major feature of the final product.
Another issue I’ve encountered is that the last NPC text bar doesn’t reappear if I hide it while the NPC is talking and try to unhide it once it’s the player’s turn. This is a small but annoying issue, so I’ve added it to the backlog for now since it’s not a top priority.
REFLECTIONS
Working on this dialogue system has really shaped me as a technical level designer and deepened my interest in creating systems for games. This project started as a cool mechanic for an assignment, but it quickly grew into something much bigger. Setting up the dialogue structure and ensuring it functions dynamically has been both challenging and rewarding, reinforcing my passion for visual scripting and technical design. Right now, the system is easy to use but very layered, which can make creating dialogue a bit difficult if you don't know it inside out, like I do.
Inspired by Fallout: New Vegas, I hope to one day reach that level of quality, but for now, I’m focused on refining what I have and expanding it further. In the future, I want this system to handle more than just regular conversations and calling custom events—I want it to allow NPCs to give and manage tasks, adding another layer of depth and weight to interactions. Looking even further ahead, I want to learn how to create my own visual scripting nodes to develop a custom way to write dialogue, making it more readable and easier to use.
This project has made me realize how much I enjoy designing gameplay systems, and I’m excited to keep pushing my skills in this direction.