Official Roblox Dialogue System and Dialogue Editor Beta

Did y’all need a tutorial to know how to use this thing? Because I just wrote one. Give it a shot!

3 Likes

I can’t wait to test this super cool new feature that I totally have never used before. Thanks David!

1 Like

My studio stopped responding when I clicked the Dialogue Editor button after using Play Solo.
It starts to respond again after a couple of minutes.

Otherwise, very nice! Can’t wait until this gets released.

Question:

Has an abstract interface, allowing you to customise the look and behavior of the client-side however you like

Does this mean it will be customisable (the way you said it was a confusing for me)? I will probably use it but the style doesn’t my game’s style.

That’s strange… what OS are you running? Specs? Is the place huge? I can’t imagine why this might be happening.

And, yes, the UI will be totally 110% customizable.

2 Likes

Awesome!

I’m using Windows 10 with a six-core 3.5GHz AMD processor and 8GB RAM.

The place isn’t large but it has around 15 NPCs and around 20 multi-mesh trees.
Probably smaller than the demo place.

I would like to go ahead and start customizing that theme now actually lol, so it’s prettier and easier on the eyes so people will use it more.

So it IS real. I’m going to love this, I can forsee that. Cheers to the new system.

How did you do the bending arrows? Many individual frames?

Trade secret :wink:

2 Likes

This is amazing. Thanks!

Don’t look in the source code of the plugin, that would ruin the mystery.

7 Likes

Taken. Looks great so far. Keep up the good work.

It looks like many frames. The points between the frames seem to be calculated using a bezier curve of some sort.

That’s how I would do it anyways.

Hey, everyone, I uncopylocked the dialogue demo place so you guys can peel it apart and see how I did what I did. Have fun!

3 Likes

What about the plugin’s interface do you find bad? How can I iterate on its appearance so that it looks… sharper?

Looks great! However there seems to be an issue where the Billboard GUI does not show back up again when you use the Player:LoadCharacter function. It produces this error:

Ah, I hadn’t considered this case. Thanks for pointing it out!

1 Like

Have a look at these examples:

Unity Flow Canvas:

Unreal Engine Blueprint Script:

CD Project RED: Witcher 3 Quest and Dialogue Editor:

My problem with yours currently is the color contrast and the icons, grid rulers, etc. These are things that can make large tedious edits or even multiple different bubbles with different options so much easier to follow and more fun to use. People are going to spend a LOT of time in this editor, you want them to have something pleasing on their eyes that doesn’t make them feel like they are using a tool with UI slapped on it as an afterthought in design for how impactful it will make this editor be more appealing.

14 Likes

I love the system, but perhaps another feature could be the addition of a more easily editable dialog GUI, with perhaps some default design options to choose from (such as: modern, rustic, quest etc) as well as a more easily accessable billboardgui (as a lot of new developers using the dialog system if this replaces the current one will not know what replicatedstorage is or what it does).

1 Like

Here’s some sample code to get you started if you wanted to bind a dialogue event to a ContextAction (good for xbox especially)

local RobloxDialogue_Root = game:GetService("ReplicatedStorage"):WaitForChild("RobloxDialogue")
local DialogueMode = RobloxDialogue_Root:WaitForChild("ClientInterface").Value

local ClientDialogueHandler = require(RobloxDialogue_Root:WaitForChild("Class"):WaitForChild("Client"))

local ClientDialogue = require(DialogueMode:WaitForChild("Interface"))
local DialogueRequested = RobloxDialogue_Root:WaitForChild("Remotes"):WaitForChild("DialogueRequested")

local function RunDialogue(RobloxDialogue)
	pcall(function()
	    ClientDialogue.Triggered(RobloxDialogue, function()
	        DialogueRequested:FireServer(RobloxDialogue)                                
	    end)
	end)
end

local LoadedDialogue = nil


local ContextActionService = game:GetService("ContextActionService")

ContextActionService:BindActionAtPriority(
	"RunLoadedDialogue",
	function(_, UserInputState, InputObject)
		if UserInputState == Enum.UserInputState.Begin then
			RunDialogue(LoadedDialogue)
		end
	end,
	false,
	Enum.ContextActionPriority.Default.Value + 10,
	Enum.KeyCode.E, Enum.KeyCode.ButtonX
)

repeat
	local ClosestTarget = nil
	local ClosestInDistance = math.huge
	for _, dialogue in pairs(ClientDialogueHandler.Dialogues) do
	    --loop
		local part = ClientDialogueHandler:GetClass("Utility"):GetDialoguePart(dialogue)
		local distance = part and ClientDialogueHandler.Player:DistanceFromCharacter(part.Position + dialogue.TriggerOffset.Value) or math.huge
		local inRange = distance < dialogue.ConversationDistance.Value
		if inRange then
			--Close enough, but is it the closest?
			if distance < ClosestInDistance then
				ClosestInDistance = distance
				ClosestTarget = dialogue
			end
		end
	end
	if LoadedDialogue ~= ClosestTarget then
		--TODO: If you need to fire a Changed event or whatever here; do it.
	end
	LoadedDialogue = ClosestTarget
	wait()
until false
7 Likes