Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics


A member registered Jun 27, 2017 · View creator page →

Creator of

Recent community posts

I ran into a similar error to this today, though quite a different context, nothing to do with rooms just calling functions and functions of structs. Was at first baffled what the stack trace and "invalid with reference" meant, but your above notes helped narrow it down to 'self' references.

I'm pretty sure it was that I was passing in self variables to functions, and then calling the temporary variable the same thing. So eg:

bean = 1

function some_func(bean) {
    something = 1 + bean;   

I removed all of the instances I'd done this and just allowed accessing self.bean inside the function. I initially set this workflow up thinking other instances would call the function, but conveniently not the case any longer. I can imagine a case where the above might be not possible and instead renaming the local variables may fix it?

Hope these thoughts help some beans!

Popping in to say I was also able to get this running on an M1 Mac Pro. I installed neko via brew though, and had no problems!

it's coming soon!!!! any day

lmao this was great :)

Hey thank you!! Yes I remember seeing quite a few of your comments :). I've actually just used the GameMaker HTML export. That's awesome you're starting to learn HTML and javascript!

Wow Joel this was so lovely!! The assets are stunning as always and the movement/effects feel really juicy. I really like your use of the theme - starting off with a player that has no properties and abilities and slowly acquiring them. I think having the movement so restricted (ie. only being able to move left for a while) was so great, especially for gamers used to platformers like this, it feels really debilitating. And then so freeing when you finally gain the ability later! The level design following each new major acquisition was great too, allowing the player to explore and appreciate their new capabilities and restrictions. It's a great exemplar of graduated tutorials/skill mastery and level design. I loved the silly upgrades too - the elevator music, fairy that just says "hey, listen".

I'm a little disappointed in the commenter I saw below framing their negative experience as if it were an objective judgement of the game, or as if they understood what care went into making it/where you spent your time. I had the complete opposite experience and was extremely impressed by how much polish and content you put into this, and I found the humour really subtle and well-delivered. It's possible to deliver constructive critique without being mean or framing your view as if it's the definitive one - we're all different people and even if you don't like something, someone else might. Claiming something fails because you personally didn't like it is silly and not helpful feedback.

Aaanyway, I can totally see this being expanded into a larger game; each ability acquisition could be expanded and given even more time, to really push the edges of what the ability can do (or what you can do by combining one of your old ones with the new one). But of course, even on its own this is a really great game and excellent execution of the "you start with nothing" concept. Great work, Joel! :)

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!

Aw thanks for playing it, I'm glad you liked it! Oh, doh, I even remember writing that and thinking it looked odd, checked the spelling, and thought I had it right!! Thank you for letting me know.

Thanks so much!! That's lovely to hear :)

Oh that's awesome to hear! Of course, I'd love to see what you're working on - do you have a twitter?

best game on the market

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.

Hey thanks! Haha fair enough, more player control options are always good :)

Aww thanks Crabby :)!!

Ah okay I think this wasn't clear in the documentation - for lines where there is a choice but you DON'T change any variables (BUT on other lines in the dialogue you HAVE) then you need to set:

myChangeVars[1] = -1; 

for those lines. That basically means there won't be any variables changing in those lines. 

Also, for the changing variable thing to work, you have to give a SPECIFIC instance ID in that argument. You'd given just an object_index, but the function variable_instance_set requires an instance ID. So at the very top when you set the diretor to an object, you can use instance_find to get the ID (hopefully there's just one instance of that object. If not, you can use "ID" to refer to itself).

Also as a note, you'd forgotten to put the "breaks" after your other cases :)

I've put all the changes into this pastebin:

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?

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). 

Thank you! :)

Hey Aavri - sorry, I didn't see this in my notifications!

I know this may be coming too late - at the moment you can't use the myChangeVars outside of dialogue choices. In the next version I'm going to change this a bit and have a more flexible system where you can just specify scripts (including those to change a variable) to run at any point in the dialogue. 

This was a lovely devlog! They sound like great projects. Looking forward to the follow-up on Sunset Witch -- and I absolutely love the sound of the Valve Kid game having a hand-drawn aesthetic!! Looking forward to your updates :)

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!

Awesome game Joel!! You got a great amount of polish in for such a short jam (the art, the bounciness, the sounds & music, the dust particles) - and I loved the dialogue and item descriptions. It's a great foundation and I hope you continue with the missions/building up the town/usurping the double triple mayor once and for all. :)

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!

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

Adorable, you've done a great job! It's a fun and simple game. I can actually see this translating to mobile quite well, with progression in the levels (perhaps travelling around the world, changing the "scene" a little bit), little power ups (speed, larger basket, invincibility from fallen fruit etc), and a certain "score" that you have to get by the end of each level to progress.

One possible tweak to make might be to reduce the possible spawn points of the fruit to be within the possible distance the player can travel. This is just because sometimes a fruit spawns over the total other side of the screen, and the player has no chance of collecting the fruit. Whereas if it was always "possible", you could even have an achievement mechanic like a "perfect level" where you don't drop ANY fruit.

Sorry for the rambling! Of course it's also totally fine to shelve this and move on to your next awesome project :)

Aw, thank you so much! We're delighted to have this feedback. In future jam games, I'll definitely keep this in mind!

And Happy Holidays! :)

Ah thank goodness!! So glad we solved it. Don't feel bad, I've done things like this so many times before! And I bet someone else is going to run into this problem in the future, so this will help them :).

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. 

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

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 :)

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? 

Oh goodness this is my bad - you're right, they do look like emotes, but the emotions will indeed change the FRAME of the portrait (the emotes are just squares I put at the corners of the different frames to differentiate them). The actual emotes are the "pop-ups" that appear in little speech bubbles above the character's head. 

Ah yeah true, you can just write names into the text, if that's where you want to put it. But a little textbox on top was exactly what I was thinking! Or perhaps on the portrait itself. I know people will want to play with it and pick the positions.

This was beautiful.  The music and visuals are wonderful, and complement each other so well - both tranquil and eerie, inviting and suspicious. 

I played it late at night, lights off, with headphones, and rain tapping at the windowsill. It was very easy to get pulled into the game; I played through multiple times to get all of the endings. I was full of questions, and suspected everything - I love how you plant little seeds, and the player can let their mind wander. 

And all that aside, the "feeling" the game creates is definitely one that stays with you. Thank you for making this!

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!

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!

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.

Cheers! I've had another commenter run into the same issue, so I'll go ahead and change the code for the new version. (I can't believe I've never run into the problem myself!)

Thanks for letting me know & discussing it with me :)

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

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.