Log in with to leave a comment.

Viewing most recent comments 1 to 40 of 41 · Next page · Last page
(1 edit) (-1)

Uuuuggghh! When I try to import your engine in my GameMaker 1.4, it gives me a bunch of errors. Can you help me just a bit or at least give some clues what I should do?

As stated in the description this is "only for GMS2" and the functions highlighted do not exist. But the good new's is that's your "clue" as to what needs to happen! Break it down line by line and find an alternative method for producing the same result. So for instance if we look at the official documentation for create_array(); [] it states that it just instantiates (prepares) the array before its used by writing "0" there for as many entries as needed. Could hypothetically use something like this to do it:  for (i=0; i < arrLength; i++) { arr[i] = 0; } where arrLength is the numeric value for how many entries you need in the array. put that into a script called "create_array" expecting 1 argument. You may need to play around with this though as i have not had 1.4 loaded onto my pc for a while now but thats the general idea. 


Thanks, Leonidus1989!


Oh my god this is the best thing ever. Thank you so much! I cannot believe it's so robust and especially the fact that its free! This is the best Christmas gift I could've asked for. One thing, I've probably already figured it out by the time you see this, but where is the code that makes the player stop moving? Thank you so much again, this is beyond useful.

(2 edits)

hi I ,why is giving me this errors?

Very cool dialog system! Can't wait to see people transforming this into other dialog system like Undertale or other.  Over all best dialog system so far! 

Hey there. Does GMS use a version of JS to code? I was wondering if you knew of a similar plugin for RPGMaker MV to do the animated dialogue in text boxes?

GMS uses its own language called "Game Maker Language" which shares similarities to C based languages (and JS by extension). Though it's not a 1 to 1 deal. For RPGMaker i know that yanfly is typically the way to go for that kind of pre-made stuff.


this is so incredibly cool, thank you so much!

(1 edit)

gms version doesn't work with html5 =\

This is incredibly helpful (even if I am late to the party). Thank you so much for your tutorials and I will definitely credit and notify you when my game is far enough along. I've learned so much from you so keep up the incredible tutorials and assets! :)

I know you've briefly mentioned how to get a proportional font, and I think it may be easier to fiddle around in obj_textbox draw_gui event.  Maybe replacing the charSize variable with something like string_width(ch).

I dunno.  Would I absolutely HAVE to make a ds map?


This is a pretty neat system, as it'll help people get past the tedious things like scripting talking systems (though they should still understand what's going on under the hood) and get right back to making games. However, I am having an issue where my text boxes seem to be spacing oddly. Is there something I'm missing to get the dialogue to space properly? Thanks.

Hi! The sounds of this package can be used for another game engine(Rpg Maker)?

This will definitely be helpful for my project that I'm doing.

One question though, how do i make it so that the dialog can advance on its own without player input. For example: Cut scenes.

Oh my god, this is such a helpful resource!
As a complete novice, does anybody know how you'd go about feeding through a randomised selection of voice sounds, instead of only a single one?

Deleted 289 days ago

Hey sorry for the slow reply - it wouldn't be the EASIEST thing to tweak, but you could save an array of voices instead of just one entry. So for example, voice = [snd_voice1, snd_voice2, snd_voice3].

Then track down the part where it plays audio, I'd just use CTRL + SHIFT + F and put "audio_play_sound", and it should take you to the function that plays it. Instead of just putting in the "voice" variable as an argument, you could do irandom_range(0,array_length_1d(voice)).

Hope that helps!

Hi, would you know how to connect the code in this tutorial to the quests video you did on Youtube? The way I want this to work is when I go up to talk to someone and choose to do something through the dialogue, a quest will start. Thanks.

in theory you could easily have an "if" statement so...... if (questActive = true) { quest_code} and use the script in the dialogue tutorial to trigger... im a pretty new to GMS2 language though.. 

Where would you write this? How would I set this up?

Thank you so much for this system, i’ve implemented it into my game, the only thing i’ve been trying to figure out is how to save the dialogue using ini, do you know how i would go about doing this?

FC, this tool is amazing!

Is there a way to have it so both Keyboard and Gamepad controls can work with this script?

As it is set up now, the variables for the controls are simply set to key constants and and Ord function. Which is connected to keyboard checks.

A gamepad button check works a bit differently as it also needs the controller device. So it basically needs two variables instead of one. Simply have, say, interact_key = gp_face2 will make the game crash if a gamepad is no connected. So changing the script works for either Keyboard or Gamepad, but not both.

I've been trying to mess around with the code to find the best possible solution. Is there something that can be done here?


(1 edit)

The sytem is fantastic, but I noticed some strange issue that may cause a lot of problem.
In fact, whenever I switch the game to full screen mode any dialogue that should trigger will not show up, but still will be going ( I hear the voice of the dialogue and can even interact with choiche type dialogues). I think it is only a graphical issue. I am working on GMS2.
Hope that you can solve this problem, I would be really gratefull to you.
P.S. I don't speak english that well, so please forgive me if I wrote something wrong :)

Deleted 1 year ago

Found out how to fix this, have a general global game object.

At the create event put this code: (This will get the width and height of you camera, here the camera is 0)

var _view_width = camera_get_view_width(view_camera[0]);
var _view_height = camera_get_view_height(view_camera[0]);
display_set_gui_size(_view_width, _view_height);

Then at obj_textbox, go to create event and change the scale variable to something that will fit your size, according to your viewport settings.

You will also need to change the fnt_dialogue size to make it fit as well.

could be her code for gui height and width doesnt like your code for resolution scaling.. without an error code or visibly seeing your structure.. my thoughts are you have two codes to get gui scale in different places

(1 edit)

When I go to talk to the object it says, "Just a little monologue" and not the actual dialogue from obj_examplchar. Please let me know what is wrong, thank you! Also what do you mean by "the correct input key", isn't there only one you use?

I have the same problem too


The asset works well for me, are you using the correct input key to interact with the obj_examplchar? 

ohhh yes I have... I have looked over everything countless times and it still doesn't work!

(1 edit)

do you have any error codes to paste?

Deleted 1 year ago
Deleted 346 days ago

Hello there! When I go to use the dialogue, the name box only shows the player name and not the object I am talking to.  Also, the text doesn't show up for some reason too, its just completely blank. Thanks for the help!

Hi there, I've been messing around with some of the code and have been deleting the parts with the emotes and portrait to see what it would like like without them and how the system will work. Deleting some of the code for these could be my problem... When I start up the game and go to the object to start the text it stops and gives me the following error: 


action number 1
of Key Press Event for <Space> Key
for object obj_player:

instance_create_layer :: specified layer "Text" does not exist
 at gml_Script_create_dialogue (line 16) - var _textbox = instance_create_layer(x,y, "Text", obj_textbox);
stack frame is
gml_Script_create_dialogue (line 16)
called from - gml_Object_obj_player_KeyPress_32 (line 1) - create_dialogue("Just a little monologue.", -1);

If there is anything wrong here or someplace that is crucial to the code that I need to go to fix please let me know! Thank you!

Hey - it looks like this is actually because you don't have a layer called "Text" in your room. This is where the textbox will get spawned by default.

Thank you so much!

Hi, Anyone was able to access documentation? System looks very good but it would be great to have it explained.

your system is amazing.

I am trying to implement something like this,

 So i am using your documentation + your example project. But I am stuck with the "MyChangeVars". I am trying to set "choice_variable" to a new value on the end of each flow but it is not working, I get this error:

action number 1
of Alarm Event for alarm 2
for object obj_textbox:

trying to index a variable which is not an array
 at gml_Object_obj_textbox_Alarm_2 (line 9) -        var obj = cv[0];
stack frame is
gml_Object_obj_textbox_Alarm_2 (line 9)

(1 edit)

. I want anyway each flow to have definitive reactions from the NPC just like your example. COuld you help me please? 

Best regards,

So basically you just want branching dialogue? That error I think is just an indication that all the variables haven't been set up quite right.

You shouldn't actually need the myChangeVars. The one you want to play around with is the myNextLine variable, where you'll set where you want each line of dialogue to go to. As the documentation says (here is the documentation if you haven't seen it already), for normal lines you can just set myNextLine[number] = number, and for dialogue choice lines you'll set it like myNextLine[number] = [num1, num2, num3] corresponding to the different choices.

It might help if you lay out all your lines consecutively and then plan where you want each line of dialogue to go (what will be the next line). 

Hi, thank you for the response :D

Yes the branching part I did and is working fine.

But I am also trying to implement like in your example that you only have 1 talk with the NPC. After that if you talk to him he will react according to the talk you had.

The way I implemented now, based on your documentation, the talk will always restart.

Oh okay hmm - then I'd guess it might just be a misplaced/missing bracket somewhere. Just make sure that you set an option for ALL the possible dialogue choices. If there's two dialogue choices, there should be two values it's going to change to. 

myChangeVars[dialogue_line_number] = [obj_id, "choice_variable_as_string", ["value1", "value2"]];

If you're still having trouble could you send me a screenshot of the code where you declare this?

still struggling, even checked your example project trying to figure it out :/

I also created this pastebin:

thx! :)

Your creations are as great as your YouTube contents... Love your works... Please keep up the good work... Love from your buddy❤

Thank you! :)

This is a really great dialogue system! I've been searching so long for something like this!!

There is one thing that I'm trying to figure out. How do you change the detection radius so it can be a rectangle? I want to make it so the radius takes the collision mask, and can be extended from there.

In the game I'm making, I'm using the dialogue system to interact with objects as well. But for example, there is a long couch, and I want to make the detection radius so you can interact with it from all sides.

Thank you!

The detection_radius is actually already a rectangle (well, a square) - the "radius" is just half the width. This variable is found in the par_speaker variable. By default the speaker objects will inherit this value, but you can tweak it for individual objects. 

Since as you said you might want to make it a rectangle instead of a square, you might want to tweak the step event for some objects too. Instead of just adding the radius to all the rectangle variables, you could add half the collision box height, and half the width, for the x and y values of the rectangle.

I hope that makes sense - let me know if you have trouble!

Thanks for the reply! This helps a lot! 

Now what I want to try is to make the dialogue trigger on a collision event instead of entering the rectangle. I'm a beginner so I'll see if I can figure it out!

This is perfect and so helpful. Thank you so much! <3

Does the system require a monospace font?

Yes. Or, not really, but it will end up spacing every letter the same amount. 

Is there a way to modify to support proportional fonts?

I am also very interested in support to proportional fonts.  Love the dialogue system, great work.

Oops sorry I missed this notification -- it's possible, but may take a bit of work. In my system, the letters are printed individually, and each time it moves where it's going to draw a letter over by the "width of one letter". This is calculated in one place and just takes the width of a generic letter written in the font. What you may have to do instead is make something like a ds_map  of the font you're using, and enter the string_width of every single letter you're going to be using. Then, in the loop that is printing all the letters, it could look up the letter in the data structure and grab its specific width to move over the y position.

So it would take a little bit of messing around, but not at all impossible - I may look into adding this feature in in the future!

Hey, no worries and I really appreciate the reply!

That helps me a great deal conceptually, I will have to give this a shot. It’s tough to draw a monospace sprite font and get it to look aesthetically pleasing, which is why I ask. But either way I want to thank you for this resource and also for what it has taught me about a dialogue system. This is very comprehensive and flexible. I also really enjoy your YouTube tutorials. Keep up the amazing work! Have a good day :)

I got this error "unknown script or function:variable_instance_exsist"  along with a couple others all starting with  "unknown script or function:" when using the updated version of your dialogue system. I did some googling and I think this is a function in GM2 not GM1, which is casing the error. Is there a versio of this for GM1 I could replace it with?


Hey - that's weird! That function does actually exist in GM1. Could you send me a screenshot of the error so I can see it exactly? (It may be that it's what you're GIVING the script is what it has a problem with.) Also - did you change anything after importing, or does it throw an error as soon as you run the demo? 

Here's the error when I just open the file in game maker.  Also I should note, I'm pretty new to game maker and I could just be doing something wrong.

Hmmmmm, what version of GameMaker Studio are you using? Is it 1.4?

I am indeed using game maker version 1.4

Then I'm stumped :(! It definitely comes up for me as an existing function (you can middle click on a function to bring it up in the documentation). 

Though, I've done some googling and noticed that it's listed in GMS2 as a new function... perhaps they only recently added it to 1.4 as well? So the only thing I can think of at this point is to make sure you've installed the latest version of GMS1.4. 

You created a very good system, works very well and is super easy to setup! Thanks for that! 

I read that you working on a variable choosen by the players answer! Can‘t wait for that update :) hope its coming soon! 

Best regards nothingAD 

Thank you! I hope you have a lot of fun with it. If you didn't know already: the next version has now been added, with that functionality of being able to change object variables :)

(1 edit)

Why The GMS 1 version throws this error ?:

action number 1
of Alarm Event for alarm 0
for object obj_textbox:

illegal array use
 at gml_Object_obj_textbox_ObjAlarm0_1 (line 73) - if(emotes != -1 and emotes[page] != -1){

Did this error throw after you customised/added your own kind of text event? I can't be sure without seeing your code, but I'd say it's because it doesn't have the right number of arguments for the "emotes" part. Make sure you fill all of the arrays with the same number of arguments.

If you're still having trouble, feel free to e-mail me your project at and I can take a look.

(2 edits)

i just imported the file to a new project, and when i ran the game the problem popped up.

Sorry I've just done the same thing and can't seem to reproduce the error. But maybe some of the assets are missing?

I think there isn't any asset missing. I Just Download the GMS1 Version, and imported it to a fresh project. First a got the error from instance_destroy(myTextbox), but after i solved that i got the array error that i mentioned on my first comment, i dunno what to do.


Hmmm I'm not sure why that would be. I'm going to upload a new version in a few days, so hopefully it will work then.

Wow! I just cannot believe how wonderful you are! This is the best dialogue solution out there, and I did spend a lot of time searching.

I have just two questions/concerns:

1. Would it be possible to log player choices in dialogue for later use? Right now they can't be used ingame except for immediate branching in the same dialogue. Also it'd be great if you could activate different scripts during dialogue, for example, give the player a new item on line 3, and move NPC on line 13, etc.

2. Alough it looks PERFECT, the in-code solution is actually not pretty - importing your dialogue to script is a lot of pain... with like ~10 lines of code for each dialogue line, or keeping track of ~5 long array every time... Would it be possible to optimize this somehow so that we could make coding the actual dialogue easier? Would be perfect if you could just write all the variables needed in one line, like you can do in Visual Novels, etc, like this:

DialogueLine(spr_nancy_happy, X, Y, Z, effects variables etc..., "Look how happy I am!");

I've seen other engines do it, do you think it would be possible at all?

Thank you!

1) Yes I'm working on including an argument in the script that allows you to change a variable according to the player's choice. That'll be in the next version, along with some stuff for animated portraits!

2) I'm not 100% sure what you mean. Are you saying you'd prefer to input each line individually, instead of all at once in the create_dialogue script?

Ahh! Sorry I've confused you!

Here is what I meant, I hope it will be easier to understand:

Currently I think there's a few ways to write dialogue in-script:
1) create_dialogue(choose text and variables) - easy for one-liners, but won't work with several lines... if there is a way, please tell me how!
2) like in GML example file - inside speaker object create user event and pase all variables for each line separately (this way each line of dialogue will require 6 lines of code, which is very hard to write)
3) like in the tutorial above - one create_dialogue with huge arrays inside. pretty hard to follow and keep track of as you need to track the lines and their parameters across several arrays manually...

I'd like to have an option # 4 with writing each line as a full create_dialogue script:
create_dialogue("Hello", Speaker1, spr_spk1_portrait1, etc);
create_dialogue("Good day!", Speaker2, spr_spk2_portrait1, etc);

And also option # 5 would be great: writing all text in the separete script so that ALL game text will be locked inside one script file and called from outside (this is important for text-heavy games - for localization and organization functions). So the dialogue will read as (sorry for bad examples):

global.txt[1] = "Hello";

global.txt[15] = "Good day!";

create_dialogue(global.txt[1], Speaker1, ...etc);
create_dialogue(global.txt[15], Speaker2, ...etc);

Do you think it will be possible to implement? This would be really great for text heavy games I think!!

I was also thinking about additional helpful improvements I hope you'll consider!
1)Triggering dialogue without hitbox collision but instead only if you're facing the interactable solid object (with instance_place I think?) so you won't be able to interact with objects by standing in the far corner of their collision box and facing the other way, which is currently a bit weird!
2) Displaying speaker name!
3) Different audio effects for different characters/lines
4) Different speed for different lines
5) Trigger world events during dialogue (movement, execute scripts, change variables, etc)

Thanks again for your great work! Please tell me if you'll consider some of this, it will make me very happy :)) I'd do it myself but I'm pretty bad at scripting for now. Also I think you could release an updated version as a paid marketplace asset, it's really good!

Ahhhh okay I see where you're going with this. It's always good to have options, and I can definitely see the appeal of setting it out like this. I'll work on putting this in in one of the next iterations of the system!

also, is there a good way of changing variables and things based on choices? kind of hard to use them in a game otherwise

Ah yeah at the moment you'd have to fiddle with the system yourself to grab what choice the player has made -- but I'm planning to release a new version in a few days that'll make this easier. 

my own attempts at making text boxes and stuff were just modified crawling text objects that had an array id have to customise manually (and destroys itself if the string is "" it worked pretty well in my small nsfw uno game

the gms1 version has a mistake in it

instance_destroy() has to be called as a function with no arguments

so id change it to this

 if(myTextbox != noone){
    with myTextbox{
        myTextbox = noone;

(1 edit)

Actually this isn't a mistake; the function has an optional argument. Its default is just to destroy the calling instance, but you can destroy a specific instance other than the calling one via the optional argument. This is according to the GameMaker documentation on the function.

As far as I know this has never caused me any problems -- have you encountered some errors?

it flagged as an error the second i opened it and it wouldnt run until i removed it

wrong number of arguments

Oh, how weird!

not weird to me, in all the versions of game maker i had all of them had instance_destroy() with an error thrown if you put something in it

if the code is instance_destroy(a), doesn't a : 

with(a) instance_destroy(); 

be enough to make things right ??

(1 edit)

This is wonderful! :) Thank you so much for making and sharing with us. 

For some reason when I import it into my existing project, and run it, the text boxes aren't appearing. I have an object set up to trigger a textevent when the player object collides with it, and I can hear the sound effects playing, and when I press E, I can hear that it's going to the next section, but I still can't see anything. Any ideas why? Sorry, I know that's kind of vague, but if there's any other info I can give you to help you help me, please let me know!

(1 edit)

Thank you :)!

Hmm, off the top of my head, it might have something to do with what layer you're creating the textboxes in (if you're using GMS2) or what depth (if you're using GMS1). It may be that the textboxes are getting drawn "under" everything.

Otherwise I think I'd have to know more about your project/see it for myself and tinker with the code. Feel free to send me the project file/additional info at, or hit me up on Discord if you'd prefer a chat (FriendlyCosmonaut#1735)!

Thanks heaps! :) I'll shoot you an email with my project.

So I managed to get the text box to display by turning off this CRT shader I'm using. But it's very tiny - I'm assuming that's because of the scaling options in the Create event of the obj_textbox, so I just need to tweak those a little. 

Thanks for making this - works really well

No worries! Feel free to throw screenshots at me if you put it into use :)

of course - quick question, do you think the best way of adding new events to this system would be by modifying the “type” variable, with 0 currently being normal and 1 being dialogue options, could I add a type 2 for a personal function like spawning a new object in the room for example?

Ahh that's an interesting one. You definitely could do it with the "type" argument. So then you could jump into the step event and expand the if/else statement to include another check. And what I think I'd do, so that you could use this for a few things, is make our third "type" run whatever script you input into text[page] for that line.

So here's some pseudo code:

if(type[page] == 0) { 
} else if(type[page] == 1) {
    //dialogue choice
} else {

So basically it runs that script and then immediately begins the next line. Or, you could make it wait some time before beginning the next page, ie. by setting of an alarm like if(alarm[3] != -1){ alarm[3] = room_speed; }.

Note that you'll also have to change the "else" in the Draw event to specifically check else if(type[page] == 0), because at the moment it just runs if text[page] isn't 1. Also, depending on what you want, you might still want to have some specific thing that it's drawing - at the moment, it'll draw nothing while we're in this "type" of event. So you might want to get it to keep drawing the text from last time, or just an empty textbox, etc.

Hope that makes sense!

Looks great I'll try it out tonight thanks again

I finally got round to trying this out - thanks for the help.

 I ended up messing with the create_dialogue script you made and added some extra variables to everything (object, object_x and object_y)  to add some more flexibility, like being able to choose what object to spawn on the fly and where abouts it would appear - I  was thinking of adding some extra variables for object names or descriptions, but I'm not sure if I'm inadvertently breaking anything in the switch statement you have in that script.

To be honest I'm kinda lost on what that switch statement does - why does it only change variables based on how many arguments are added when it looks like every argument is added each time the script it used anyway? 

Ah that's awesome! Yeah to be honest I need to clean that script up. When I was initially adding the arguments I wanted to keep them optional, so I just had it depend on the arguments you gave it. But now that there's so many it would make more sense to just check if you input a default argument (-1) instead of having it depend on the argument COUNT, which is pretty silly. 

I'll definitely change this in one of the next iterations to make it easier for you/others to play with the code!

Thank you so much!

You're welcome! :)

Oh it GMS2. I guess it doesn't work for GMS1

I've added a file for GMS1 :)

Viewing most recent comments 1 to 40 of 41 · Next page · Last page