Dialogue system with character portraits

Hi there, pretty simple question I have!

How would one go about creating a dialogue system that resembles one you’d see in a RPG, with a character portrait to one side?

Visual example;

Similar to this photo, I’d just want the NPC you’re talking to to be illustrated, and for them to change sprites/portraits according to the conversation. (Sprites are not an issue, I’m an artist by trade)

I’m pretty sure I’ve seen this on Roblox before, but I couldn’t track down any examples.
My main question is if this is possible with the Dialog system, or would I have to create my own method/module for it?

I’m not asking for help with code or such, I’d just like to know the best tools to use to achieve this. Thanks!


The dialog system doesn’t allow for custom UI at the moment. You would have to code your own user interface system for this project. I would recommend reading these:


This would be something you’d have to make yourself. The dialog system is nice but it wouldn’t be able to make something to this effect.

1 Like

@emperormicah @ThomasChabot Thank you both very much for the prompt reply - atleast now I know what I’m getting myself into! I’ll mark this as resolved.

The legacy dialogue system does not have customisability, no, but I don’t understand why you’d use that. All it’s good for is if you want a quick solution to dialogues. There is a proper dialogue system available, which was announced a while back. You should be using this for projects with dialogues going forward, save for if you make your own system. See below.

You’ve probably seen this system before because:
A. They made it themselves.
B. They’re using the Roblox Dialogue Editor (Lua port of dialogues with tons of features).

Don’t use Dialog objects, those are antiquated and absolutely terrible. They aren’t customisable (which @emperormicah pointed out) and they lack any kind of good functionality you’d wish out of a dialogue system.

You can always create your own systems to accomplish certain tasks, of course. For this however, I know I have the best tool for you that’ll help you very much. Take a look.

Some time back, an interning engineer (???) announced a Roblox Dialogue System which was to overtake the C++ dialogue system (the dialog object you linked). This essentially became the new official system for creating dialogues (seriously, don’t use Dialog instances - they’re gross). This system is in Lua, allowing for wide developer customisability in all senses - functionality, visuals, you name it.

Although you do have to learn the ropes a bit and know how to code, the tools are provided for you and it’s up to you to use those tools to your advantage. There’s UI themes and everything here that you could want out of a dialogue editor. You’ll know what I mean when you install it - it’s great.

The organisation feels somewhat like the Lua Chat System in the sense of how it can be edited and whatnot. Give it a look:

New solution please.

Nice Fire Emblem picture, by the way.

1 Like

You shouldn’t really use Dialog anymore, as it’s really outdated.
Like @colbert2677 suggested, Roblox has it’s own Dialogue System which supports a lot of customizations to it and I’m pretty sure it also allows UI customizations in runtime, which is what you need.

Thank you for the reply, however I have one question. I actually found this tool when I was researching, but I found recent comments saying that it had been completely broke per a recent update (FE maybe? Im not certain). Is this true? I would have gone ahead and used it, had it not been for those issues I saw people talking about.

I’ll mark your post as a solution if you can answer this for me. Thank you!

It’s not really broken. It was made to work with FE, as all things have by Roblox for a while now. There was just this one issue where it made a hacky workaround to preserve UI states by archiving and readding them after death. Due to the ResetOnSpawn property of LayerCollectors, this is no longer an issue. You may have to manually void the clone-on-death behaviour by commenting it out and simply setting the UI’s ResetOnSpawn property to false if the plugin wasn’t updated to reflect this.

Again, it’s highly customisable, so UI control is in your hands. It’s just the default behaviour that was slightly bugged (but not too damaging).

1 Like

Alright, thank you for the detailed explanation! This is very useful, and I’ll see what I can do with it to achieve my desired results for this project!

I have re-marked the solution to this post ^^

1 Like