Dialogue Kit V2.5 // Fast, Easy Interactive Dialogues and Events


Fast, Easy Interactive Dialogues and Events. Rewritten and better than ever.

DialogueKitV2.5



This is Dialogue Kit V2.5, the successor to Dialogue Kit V2. I didn’t skip straight to V3 because V2.5 still uses a bunch of aspects from DKV2, just more refined & way, way faster.

Dialogue Kit V2.5 is a system which prompts users with text or ‘Dialogues’ in this case. It is made to be used for NPC’s but it can also be used for a variety of other things such as a tutorial, shop, quest, opening a door, narration & so much more!

With V2.5, you can now use rich text in dialogues, customize the TweenInfo & Positions between Dialogues, settings have been moved from a Script to actual values to prevent clutter, and more great new additions that are in the Documentation script of the Dialogue Kit V2.5 model.

Here I’ll be explaining how the system works, all of its features and how you can use it in your experience. If you’d like to first try the system out in-game before you consider using it in your experience, you can test it in my Test Place here!


You can get the model for Dialogue Kit V2.5 here or below, it is merged with V2.



Creating Dialogues in Dialogue Kit V2.5 is basically the same as creating a Dialogue in V2.
You require the main ModuleScript, run the ‘CreateDialogue()’ function and you’re done. The CreateDialogue function can be ran anywhere, as long as you have access to the ModuleScript (named DialogueKit) and have something that can trigger it.

Dialogue Kit V2.5 comes with a pre-installed Dialogue called TestPrompt located in the ‘DialogueStorage’ folder, it contains everything that needs to be inside of the CreateDialogue function.

The system can be customized with each dialogue with the Config instance, simply reference your desired Config folder in your Dialogue, that Dialogue’s settings will be assigned to that Config instance. Before, settings were in the CreateDialogue instance but that was way too cluttered.

Example of CreateDialogue
-- This function includes comments on how everything works inside of the TestPrompt LocalScript.
-- This is just that without the comments.
local dialogueKitModule = require(script.Parent.Parent.DialogueKit)
dialogueKitModule.CreateDialogue(
	{
		InitialLayer = "Layer1",
		SkinName = "DefaultDark",
		Config = script.Config,

		Layers = {
			Layer1 = {
				Dialogue = {
					'Content1',
					'Content2',
					'Content3'
				},
					
				DialogueSounds = {nil, nil},
				DialogueImage = "rbxassetid://14973462209",
				Title = "DialogueTitle",

				Replies = {
					reply1 = {
						ReplyText = "Reply",
						ReplyLayer = "Layer2"
					},
						
					_goodbye = {
						ReplyText = "Goodbye!",
					}
				},
					
				Exec = {
				}
			},
				
			Layer2 = {
				Dialogue = {"Thanks for replying."},
				DialogueSounds = {},
				DialogueImage = "rbxassetid://14973462209",
				Title = "DialogueTitle",

				Replies = {
				},
					
				Exec = {
				}
			},
		}
	}
)


To install Dialogue Kit V2.5 into your experience, simply insert the model from your Toolbox and follow along with the video below!

Now that you’ve installed Dialogue Kit V2.5, you don’t have to read this DevForum post to set it up! Open the Documentation script under the ‘Dialogue Kit V2.5’ folder and it will give you a full explanation on how to create dialogues in Dialogue Kit V2.5.

Now, I’ll give you a quick brief of the main features Dialogue Kit V2.5 has to offer to better convince you to use it, I’ll start off with the stuff mentioned early on and some stuff I haven’t mentioned before.

Native Rich Text Support

Dialogue Kit V2.5 allows you to use Rich Text in your dialogues without any external modules. It’s currently pretty limited to select rich text tags, so you can only make some simple, text changes like the color, transparency, stroke, underline, boldness, etc. It has full support of all Escape Forms.

Example use
Layer1 = {
	Dialogue = {
		'If we want to make our text red, we can write the following to make the text... <font color="#ff4d4d">Red!</font>',
	},
					
	DialogueSounds = {},
	DialogueImage = nil,
	Title = "DialogueTitle",

	Replies = {
		
	},
					
	Exec = {
						
	}
},

Execute Code Locally

One of the main features for Dialogue Kit V2.5 is executing client-sided code (which can also be used to communicate with the server via events) in a dialogue. It can be used to give an NPC animations, give the player a quest, give the player a badge, pretty much anything you can think of!

Executing code on Dialogue Kit V2.5 is called ‘Exec’. It has been slightly reworked and now includes a few new useful features like running code before/after the typewriter, pressing the continue button on a specific piece of content & more.

Example use
function functionnameherewithoutbrackets()
	print("hello, devforum!")
end

Exec = {
	execExample = {
		Function = functionnameherewithoutbrackets, -- Create a 'function' outside the dialoguePrompt.Triggered and run it here. This is used to run code in the dialogue. You can use this for firing an event to start a quest or change NPC animations.
		ExecTime = "Before", -- Before = Exec runs before the typewriter starts, After = Exec runs after the dialogue finishes typing.
		ExecContent = "reply2", -- This can be a number or string. Check the cheat sheet below.
							
		-- "_continue(contentnumber)" -- This will run when the continue button is pressed at the specified content number. If I put '_continue1' for example, when I press the continue button after Content Number 1, my function will run.
		-- "ReplyName" -- This should just be a reply name. For example, if I put 'reply1' as my ExecContent, my function will run when I press the 'reply1' reply.
		-- Number -- Similar to _continue, but instead of running when the continue button is pressed, it runs automatically before or after the typewriter starts/finishes typing. For example, if I just put the number 2 (no quotation marks) in my ExecContent, it will run before the Typewriter starts on Content Number 2.
	},
}

Voice Acting and Sounds Support

This was also in Dialogue Kit V2 and hasn’t changed at all, it is a key feature though which is why it’s here. Dialogue Kit V2.5 can play sounds when the Typewriter types a letter, it can play background music and it can even play sounds per piece of content, aka a perfect match for voice acting.

Voice Acting Example Use
-- If you want to play Sounds, they are found in the 'Config' file under Typewriter's Attributes and BackgroundSound
Layer1 = {
	Dialogue = {
		'If we want to make our text red, we can write the following to make the text... <font color="#ff4d4d">Red!</font>',
	},

	DialogueSounds = {1234}, -- DialogueSounds can be used for Voice Acting. This is the same as the Dialogue table, but should be SoundId's instead. If you want to skip a sound, just set it as nil
	DialogueImage = nil,
	Title = "DialogueTitle",
},

For some lesser stuff…

The features below are settings in the config folder that are optional/enabled by default but aren’t as big to have their own section.

Extra Settings List

Most of the settings under the Config file use Attributes. Make sure you edit those as well!

  • You can use your Keyboard and/or Gamepad to advance in the Dialogue. Return,1,2,3,4 default for Keyboard,
  • You can enable optional cinematic bars to give your experience and dialogue a bit of a cinematic feeling,
  • You can choose to stop the dialogue when the player dies,
  • You can disable CoreUI when in the dialogue,
  • You can set the player’s camera to a BasePart during the dialogue,
  • You can enable the Continue button while the typewriter is typing out the dialogue to instantly fill the text (Basically a skip feature!)

Super easy to customize, I mean it. If it’s your first day on Studio, you can customize this kit.

More below!


Alright, let’s customize Dialogue Kit V2.5.

Dialogue Kit V2.5 comes with 1 default and 8 optional ‘skins’ to use. Skins are basically complete or basic overhauls to the default UI. In this section I will show you how to install a skin & how to make your own. I will be adding new skins that I make to the Updates section of this post which can be found below.

How to install Skins

To install a skin, go into the Skins folder under the Dialogue Kit V2.5 Folder and select a skin you want to use. To preview a skin, drag the frame into the DialogueKit ScreenGui and set Visible to true. This will give you a basic look at the skin (It may be different when playtesting in your experience, especially the Hotline skin)

After that, your skin is basically installed! You just need to reference it in your Dialogue for it to work.

InitialLayer = "Layer1", -- Unchanged
SkinName = "Hotline", -- By default, this will be 'DefaultDark', but I want to use the Hotline skin. So I'll put the name of the skin here.
Config = script.Config, -- Unchanged
How to make a Custom Skin

To make a custom skin, we’ll go into the Skins folder and put the Custom skin into our Dialogue Skins. Set visible to True on the skin and get editing!

Once you’ve made your skin, rename it, make a config for it (I recommend cloning the DefaultConfig provided in the Dialogue Kit V2.5 folder into a new TestPrompt) and playtest!


Dialogue Kit V2.5 Release (03/13/25)
  • Released Dialogue Kit V2.5, Dialogue Kit V2 is now obsolete & unsupported,
  • I rewrote the whole script, that’s all you need to know really.

Added

  • Updated how Settings works, now renamed to Config in Dialogues.
  • Added the new ‘Hotline’ skin, you get the reference,
  • Added a new ‘KeyCode’ setting where users can press a keybind to continue dialogue,
  • Migrated to task.wait() for the typewriter instead of just wait(),

Fixes

  • Fixed most bugs relating to Walkspeed,
  • Fixed most bugs relating to player death,

Known Issues

  • No known issues right now. If you find any bugs, please feel free to reply or message me!
Bug Fixes (09/30/24) (DKV2)

Fixes

  • Fixes aren’t guaranteed, these were bugs that I found on my own,
  • ContinueButtonVisibleDuringReply shouldn’t break the Continue Button on the next layer,
  • Walkspeed should properly save the players last default value.
Patch 1 (DKV2)

Added

  • StopDialogueOnDeath // Automatically stops the dialogue if the player dies,
  • InteractWithDialogueWhenDead // Disable/Enable Dialogue creation when dead,
  • TypewriterSoundPitch // Change the pitch of the Typewriter,
  • “Goofy” Dialogue Skin,
  • “RPG” Dialogue Skin inspired by Undertale.

Fixes

  • Continue button can now be clicked with the virtual cursor or the UI Selecter on gamepads,
  • Players WalkSpeed gets set back to their default WalkSpeed if they die during the dialogue.

Known Issues

  • If ContinueButtonVisibleDuringTypewriter is enabled, the Continue button is unable to be interacted with when moving to a new layer.


In conclusion, thank you so much for the support on my past two Dialogue systems. I really hope you find great use out of the most recent iteration and it is helpful in your projects. If you have any problems, encounter any bugs or get confused, don’t hesitate to reply to this post or PM me, I’ll respond ASAP! This is currently the release version of Dialogue Kit V2.5 so I wouldn’t be surprised if there are bugs.

I did have some questions about forks and edits in Dialogue Kit V2, I want to clarify that you are completely free to do that for V2 and V2.5! Go crazy!

Thank you!

17 Likes

This dialogue kit seems pretty cool! I’ll be sure to save this for later, and use it in one of my games

1 Like

well made. followed the document and skin install guide, it is easy to follow. thank you for the module!

issues i found:

  • DialogueSounds doesn’t work out of the box. inspected the code, turns out it is referencing SoundService/DialogueKit/DialogueSound as a sound template

feature request:

  • because different sound files do not have the same volume, could let us control the output volume with like a config DialogueSoundVolumes
  • my humanoid walk speed is not restored correctly, inspected the code, turns out if its Config/DialogueWalkSpeed has the attribute DefaultWalkSpeed, then it will not follow the original walk speed, it will be nice if it is mentioned in the document
  • it would be nice if we can execute a callback at timing = “dialogue closed”

Oh wow I really forgot to put in the DialogueKit sound group, thanks for bringing that to my attention, it’s now included inside the ‘Dialogue Kit V2.5’ folder + it’s referenced in the documentation.

For your feature requests, I’ll have to have a look at the volume control.

I’ll refer to your 2nd request and add a boolean for saving the players walkspeed when they open the dialogue and restore it when it closes.

For your third request, I think you should already be able to do this by setting ExecTime to “After” and setting the ExecContent to “_continue(numberoflastcontenthere)”.

1 Like

I simply can’t thank you enough. It is by far the best dialogue system on Roblox. The last thing i’d want to see is text animations (wavy, rainbow, etc)!

1 Like

Thanks for the response.
Regarding to the volume control, in fact, we may need to also adjust other sound properties such as PlaybackSpeed and SoundGroup. so i am thinking it may be more flexible to specify the name of the Sound template object. e.g.

DialogueSoundTemplates = {
  nil, -- nil for default 'DialogueSound'
  "LowerVolume"
 }

image


another issue:
there are two errors for the sound

Failed to load sound rbxassetid://124153682998278: User is not authorized to access Asset.  -  Studio
Failed to load sound rbxassetid://137377264554522: User is not authorized to access Asset.  -  Studio
The experience doesn't have access permission to use asset id 137377264554522. Click to share access  -  Studio
The experience doesn't have access permission to use asset id 124153682998278. Click to share access  -  Studio


image

I am trying to keep the stuff in the “createdialogue” function to a minimum so I’ll have to look at a workaround for what you want with audio, for the sounds in the RPG skin not working, I can’t do much about it because Roblox won’t let me publish audio.

2 Likes