OFFICIAL GameMaker Studio 2 Version 2.3.0 Release

FrostyCat

Member
There are a couple issues with the learn page. For example the videos shown when looking at the video section before and after expanding are different and Gloomy Toad unfortunately deactivated his entire YouTube channel so those are dead links. Some of the other resources are also significantly outdated. I don't think there's been a change to it in nearly a year. Personally, I wish this was a section of their website that YoYo kept up on, mostly for selfish reasons (it'd be nice if my videos had a chance of making it up there) but also because I think there is a lot of interesting stuff out there, that I would find interesting, that just doesn't show up. In a lot of ways, I think this forum serves that purpose instead (the tutorials section here is much better, the marketplace section is much better for learning about new resources, and so on).

The 2.3 question is a little harder though. Right now, there isn't enough quality content out there to actually make this doable in my opinion. Certainly there are no game tutorials out there on it yet which is one of the key selling points for GameMaker. Not even YoYo's own official tutorials are for 2.3 yet. Also, and I'm sure YoYo has a better understanding of this, but I'd be willing to be a lot of people aren't updating. So for many people, the older tutorials are going to be good for a long time. Not to mention that many things are valid across multiple versions of GM (even back to 1.4).
Personally, I think now is a good time to start rebooting the onboarding process for GMS 2.3, given how much of the tutorial ecosystem has fallen apart.

And quite frankly I think it's broken long before GMS 2.3. 95%+ of the existing tutorials and books in GML suffer from the same issues:
  • Too much "how to make X" content that encourages blind copying
  • Novices are unable to derive basic skills off "how to make X" tutorials and remain skiddies forever
  • Most tutorial series either contain material that is too specific to a project, or so much diverse content that it becomes hard to grasp
  • Tutorials generally come with a working product but no follow-up exercises that depend on the viewer/reader's own skills, giving a false sense of competency
  • Lack of clear coverage for basic GML and abstract logic
  • Lack of general direction for study, most novices just bounce around random videos wasting their time
  • Most GML books are written by designers instead of genuine programmers, and are also obsolete given the GMS 2.3 updates
On top of that, thanks to YoYo's Marketing department, virtually ALL inbound links to GMS 2 from places like Ludem Dare or GameJolt advertise GMS 2 as a Drag-and-Drop engine. Yet anyone remotely familiar with the GMC or the GM YouTube scene knows the support is non-existent. This lack of support amounts to false advertisement. It is not sustainable, and will lose YoYo future users and market share in the emerging field of low-code programming (estimated to be about $45B in 2025). If YoYo values their inbound referrals, they should consider expanding support for Drag-and-Drop to at least a usable extent.
 

gnysek

Member
I was saying from beginning, that making so many changes shouldn't mean numbering from 2.2.x to 2.3.x, it's bad for new users, for seo, for tutorials etc. If they would name it 3.0 it would be much easier to understand, that there incompabilities between those versions, and you can't just "copy paste" things, or follow same tutorials (ok, maybe you can for DnD), and you could still use 2.2.5 separately, which lot of people want (I'm a big fan of having 2.3 only, but when I need to quickly look into my old "test" projects in read-only mode, and then I need to convert each of them... that's too much time consuming).
 

Electros

Member
Hi @rmanthorp - just wondering if there are going to be any hotfix / minor releases between 2.3.0 and 2.3.1?

One of my main projects converted to 2.3 succesfully, but has had quite a few crashing issues, with some differences between VM and YYC. I've fixed or worked around some issues, but others are causing bigger headaches.

I guess it's a query on whether I should keep trying to fix these currently, or whether there are known issues which might be adressed in a hotfix release that may in turn solve these?
 

gnysek

Member
There are some movements about 2.3.1, beta may be close... :squirrel: When - it depends on internal QA results probably.

So I doubt that there will be any hotfixes between 2.3.0 and 2.3.1.

I must say that there's a lot of content as for minor update - I wish that all updates are so big!
 
Last edited:

chirpy

Member
My android game using box2d physics crashes on game room start (probably doing dynamic physics object creation / deletion).
Turning off garbage collection using gc_enable(false) fixed it for me.

(Filed a rough bug report)

Code:
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
Cause: null pointer dereference

/lib/arm64/libyoyo.so (b2Fixture::Destroy(b2BlockAllocator*)+28) (BuildId: 7a51802fbe6f0c6fe2b49dd80e9c2b426afcfa8e)
[Edit 2020/9/18: Sorry all, I can't easily reproduce this; I'm assuming it's a race between GC and something else e.g. physics, some of my rooms can be entered with faulty physics, but others crash before frames can be rendered.]
 
Last edited:
What HTML5 bugs specifically?
You can't pass scripts/methods in as arguments on HTML5. There are other minor bugs but this is the biggest one that I am aware of. It is affecting me as well as some other people making our game unplayable on HTML5.

It should be fixed in 2.3.1, but I don't know when that will be or if we will get early beta access to it or not.
 

Fanatrick

Member
You can't pass scripts/methods in as arguments on HTML5. There are other minor bugs but this is the biggest one that I am aware of. It is affecting me as well as some other people making our game unplayable on HTML5.

It should be fixed in 2.3.1, but I don't know when that will be or if we will get early beta access to it or not.
Static arrays also crash for me on HTML5.

GML:
function class() constructor {
    static myarray = [100];
    
    static get = function() {
        return myarray[0];
    }
}
 

Yal

🐧 *penguin noises*
GMC Elder
I've seen some weird behavior when reading animation curves from code that makes it seem like they always use linear interpolation between points... has anyone else seen similar behavior or is it just me having imprecise human senses? I remember seeing some notice that curves are linear in some context (sequences using animation curves iirc) so perhaps they're actually always linear for now and I just missed the memo...?

(The code I'm using looks like this, for the record: I get the curve by channel and only ever use 1 channel per curve, the curve itself has the normalized domain [0, 1], and I use the output value to lerp between start and endpoints to un-normalize it - if the curve's output value is nonlinear the lerp output which uses it as input should also be nonlinear as per the filter theorem, so I don't think this is the issue)
GML:
function ac_eval(curve,channel,point) {
    var cs = animcurve_get_channel(curve,channel);
    return animcurve_channel_evaluate(cs,point);
}
 

kupo15

Member
is the async event changed in 2.3? Async system event doesn't seem to fire upon game start anymore. Also got this strange error related to gamepads when I thought pad_index is supposed to be a built in key value pair. At least it worked in 2.25, all I did was convert to 2.3 and now getting this error


___________________________________________
############################################################################################
ERROR in
action number 1
of Step Event0
for object con_main:

Data structure with index does not exist.
at gml_Script_ini_gamepad (line 4) - var pad = async_load[? "pad_index"]; // get the slot the controller is plugged into
############################################################################################
gml_Script_ini_gamepad (line 4)
gml_Script_async_gamepad_unplugged (line 4) - ini_gamepad(); // check for (un)plugged in gamepads
gml_Object_con_main_Step_0 (line 22) - async_gamepad_unplugged();
 

FrostyCat

Member
is the async event changed in 2.3? Async system event doesn't seem to fire upon game start anymore. Also got this strange error related to gamepads when I thought pad_index is supposed to be a built in key value pair. At least it worked in 2.25, all I did was convert to 2.3 and now getting this error


___________________________________________
############################################################################################
ERROR in
action number 1
of Step Event0
for object con_main:

Data structure with index does not exist.
at gml_Script_ini_gamepad (line 4) - var pad = async_load[? "pad_index"]; // get the slot the controller is plugged into
############################################################################################
gml_Script_ini_gamepad (line 4)
gml_Script_async_gamepad_unplugged (line 4) - ini_gamepad(); // check for (un)plugged in gamepads
gml_Object_con_main_Step_0 (line 22) - async_gamepad_unplugged();
How many times do I need to tell rookies to read error messages and not to reference async_load in the Step event?
 

kupo15

Member
How many times do I need to tell rookies to read error messages and not to reference async_load in the Step event?
Three things...
1.) I am not a rookie, thanks
2.) I just added that script there as a debug thing right now to fire it bc it was not firing so that explains the error
3.) While you were busy taking glee in unnecessarily roasting me and being an *******, you didn't answer my original question...thanks for that

I guess its just not recognizing the gamepad getting plugged in. Maybe I need to be using a different async event in 2.3
 

Zhanghua

Member
Three things...
1.) I am not a rookie, thanks
2.) I just added that script there as a debug thing right now to fire it bc it was not firing so that explains the error
3.) While you were busy taking glee in unnecessarily roasting me and being an *******, you didn't answer my original question...thanks for that

I guess its just not recognizing the gamepad getting plugged in. Maybe I need to be using a different async event in 2.3
PLease give the minimum debug project or code.
 

Yal

🐧 *penguin noises*
GMC Elder
is the async event changed in 2.3? Async system event doesn't seem to fire upon game start anymore. Also got this strange error related to gamepads when I thought pad_index is supposed to be a built in key value pair. At least it worked in 2.25, all I did was convert to 2.3 and now getting this error


___________________________________________
############################################################################################
ERROR in
action number 1
of Step Event0
for object con_main:

Data structure with index does not exist.
at gml_Script_ini_gamepad (line 4) - var pad = async_load[? "pad_index"]; // get the slot the controller is plugged into
############################################################################################
gml_Script_ini_gamepad (line 4)
gml_Script_async_gamepad_unplugged (line 4) - ini_gamepad(); // check for (un)plugged in gamepads
gml_Object_con_main_Step_0 (line 22) - async_gamepad_unplugged();
async_load only exists in asynchronous events, and this is a step event.

Gamepad (dis)connections happen in Async: System events so make sure the converted code is in one of those. You probably should also check the event_type key and do nothing if it's not "gamepad discovered" or "gamepad lost".
 

gnysek

Member
I will be watching very carefully places where squirrels :squirrel: can access, as it seems that 2.3.1 beta is getting closer and closer to public (beta) release. From what I remember, all betas from now on will be always a separate ones, and there will be no more chekbox to opt-in, so we can check it without conflicts. I'm keeping my fingers crossed for it to happen this week, as I already encountered some bug which I hope will be fixed in new version too...
 

Mert

Member
is the async event changed in 2.3? Async system event doesn't seem to fire upon game start anymore. Also got this strange error related to gamepads when I thought pad_index is supposed to be a built in key value pair. At least it worked in 2.25, all I did was convert to 2.3 and now getting this error


___________________________________________
############################################################################################
ERROR in
action number 1
of Step Event0
for object con_main:

Data structure with index does not exist.
at gml_Script_ini_gamepad (line 4) - var pad = async_load[? "pad_index"]; // get the slot the controller is plugged into
############################################################################################
gml_Script_ini_gamepad (line 4)
gml_Script_async_gamepad_unplugged (line 4) - ini_gamepad(); // check for (un)plugged in gamepads
gml_Object_con_main_Step_0 (line 22) - async_gamepad_unplugged();
You should use that in System Async Event(or similar to that, idk) as the async_load[? "pad_index"] is accessible within that particular event.
 

kupo15

Member
@Yal @Mert @gnysek

Huh, it appears that there are in fact squirrels messing with things. I didn't have my async controller stuff in the step even originally and only put it in there because my controller code was not working to manually fired it (but then removed it since Frosty said that was the source of the crash which it was)

Though its very strange, I didn't do anything differently and tried running the game and now the async works like before. It honestly wasn't recognizing my gamepads which prompted my question and now it does. I have no idea what happened but I guess its "fixed"? haha thanks for the responses! :D
 

Yal

🐧 *penguin noises*
GMC Elder
Though its very strange, I didn't do anything differently
There's always the chance that you had a stale cache that just happened to work, then something unrelated caused a cache rebuild and suddenly GM found the old-and-not-working code and finally pointed out the error.
 

kupo15

Member
There's always the chance that you had a stale cache that just happened to work, then something unrelated caused a cache rebuild and suddenly GM found the old-and-not-working code and finally pointed out the error.
So not something I should be worried about? I'm working on my big project and I hope it doesn't do something like that and randomly overwrite or lose scripts
 

Zhanghua

Member
I think the authorities are secretly holding back the big moves.
As a warning of previous bug version for the future.
 

Yal

🐧 *penguin noises*
GMC Elder
So not something I should be worried about? I'm working on my big project and I hope it doesn't do something like that and randomly overwrite or lose scripts
First of all, use source control (once you learn the most basic Git command-line commands you can make a full cloud backup of your project in 20 seconds*)... now you have the power to instantly revive any overwritten/lost script by just checking it out from your repository.
Secondly, the cache is a working directory that stores "half-digested" versions of your assets en route from your source files to the final executable** and it's completely separate from your actual project. Cache corruption happens when GM thinks it has the latest version of something, so it skips building it, but in fact it doesn't have the correct version of that asset and then the final executable acts weird; clearing the cache deletes all the cached assets and forces GM to rebuild the half-digested data blobs using the latest version of all the project's assets.

The vast majority of the time, cached graphics assets get corrupted (and that's usually obvious - I had one case where all graphics assets in my project got corrupted and only single-colored rectangles showed up in-game), but it's not entirely unheard of that scripts get corrupted too.



* net traffic times for transferring files to cloud not included
** GM basically builds an executable every time you hit F5 to test play, it's just hiding it for your convenience. The cache is a very important bit of making this part smooth.
 

kupo15

Member
First of all, use source control (once you learn the most basic Git command-line commands you can make a full cloud backup of your project in 20 seconds*)... now you have the power to instantly revive any overwritten/lost script by just checking it out from your repository.
Secondly, the cache is a working directory that stores "half-digested" versions of your assets en route from your source files to the final executable** and it's completely separate from your actual project. Cache corruption happens when GM thinks it has the latest version of something, so it skips building it, but in fact it doesn't have the correct version of that asset and then the final executable acts weird; clearing the cache deletes all the cached assets and forces GM to rebuild the half-digested data blobs using the latest version of all the project's assets.

The vast majority of the time, cached graphics assets get corrupted (and that's usually obvious - I had one case where all graphics assets in my project got corrupted and only single-colored rectangles showed up in-game), but it's not entirely unheard of that scripts get corrupted too.



* net traffic times for transferring files to cloud not included
** GM basically builds an executable every time you hit F5 to test play, it's just hiding it for your convenience. The cache is a very important bit of making this part smooth.
I have github desktop that I use. It still scares the crap using that thing being afraid its not backing up bc I'm so used to the comfort of DB haha I also make sure I export a version frequently in case I need that.

Is there any word on when the next update will be? Looking forward to the image_index bug to be fixed
 

kburkhart84

Firehammer Games
I have github desktop that I use. It still scares the crap using that thing being afraid its not backing up bc I'm so used to the comfort of DB haha I also make sure I export a version frequently in case I need that.
Github Desktop makes it extremely easy and is what I use. Mine(for now at least) is also stored in Dropbox(never given me issues though others say they have had them). And I backup daily to a local external 6TB drive as well. I feel pretty secure. I'm covered something drastic happens, something that happens to take out two different cloud based things along with both my internal and external local drive at the same time. That's 4 copies of the data.

Even better, I have my Dropbox on both my work and personal laptops, so depending on when the last time I powered those on and let them update the folder, that's a couple extra copies out there :)

Is there any word on when the next update will be? Looking forward to the image_index bug to be fixed
It seems that a squirrel above mentioned that the public beta for the new version might be coming in a week or two(if I remember correctly).
 

erayzesen

Member
Hi guys. I wonder this how can i downgrade 2.2.5 from 2.3? Game maker received automatic updates this morning. I was using 2.2.5 because of the risk of problems. So It's not good news for me.
 

Nocturne

Friendly Tyrant
Forum Staff
Admin
Moderator
Hi guys. I wonder this how can i downgrade 2.2.5 from 2.3? Game maker received automatic updates this morning. I was using 2.2.5 because of the risk of problems. So It's not good news for me.
Uninstall 2.3, then go to the Release Notes and in the "Older Versions" section get the 2.2.5 download. When prompted to update after installing just ignore it.
 

erayzesen

Member
Uninstall 2.3, then go to the Release Notes and in the "Older Versions" section get the 2.2.5 download. When prompted to update after installing just ignore it.
Thank you. I tried the new version on my project today. Actually I was scared about bugs or some surprises but my project working well now. interesting... :rolleyes: I had no hope of html5 target after my experiments of beta, I closed my eyes while building. :D It looks like a lot of bugs were cleared after the beta. it's wonderful.
 
Last edited:
Is there any quick fix for sprites failing to load upon compile after editing them, and then every single sprite failing to load after cleaning the build? I'm getting real tired of having to spend anywhere from minutes to hours trying to fix my project so that I can actually test again...
 

Jupelius

Member
Is there a way to get the manual back to the actual IDE of gamemaker?
I have never used manuals trought web browser, if its software that needs constant manual digging.

So in my case the browser manual is the worst case scenaria that there can be.
Im intelligent and for that reasons have very unique workflows and use browser so mutch other stuff at the same time when i code.
Its crusial that digging manual doesn't interfere my web browsing...
I dont have great memory and need to learn multiple different softwares as indie developer, so i cant remember everything all the time.
So i am constantly digging the manual with gamemaker, but its horrible in all senses trought the web browser.

So if there isn't option to have the manual in the IDE, could you suggest it so that it could return there as an option?
This manual thing is very problematic throwback in my case!
 
Man this exception_unhandled_handler thing is awesome...I've finally got a bare minimum grasp on this exceptions/try/catch thing but I followed the general idea in the manual for exporting crazy exceptions to a beautified log file and its made debugging mysterious "aborts after compiling with no explanation" crashes so much easier.

Also I'm using .jsons for localization but if someone editing a language .json messes up the file, this try/catch deal lets me pop up a "hey your json file is ****ed, do you want to quit and go fix it (for someone doing a localization) or just replace it with the default one and play the game? (for a user who accidentally messes the file up exploring the directory)"

Also being able to "crash elegantly" as the manual puts it is great. This'll be great for users to send error reports if they do crash too, although I'm trying to follow the "do what the user would probably want the game to do if this doesn't work" principle...

But in situations like the user editing a .json file you sometimes can't tell what their intention is and how a normal player would want you the code to handle the problem is the opposite of what someone editing would want it to do (replacing a language .json you've been working on because you forgot a bracket because a normal player would just want the game to fix the .json). And it seems like try/catch is perfect for those situations!

I've never even heard of try/catch or had any idea what an exception was before a few days ago, I am so loving these new features! Bit of a steep learning curve at first but so worth it. I can't believe how much cleaner and more organized my code is compared to previous spaghetti code projects I can't even decipher anymore.

First of all, use source control
I have github desktop that I use. It still scares the crap using that thing being afraid its not backing up bc I'm so used to the comfort of DB haha I also make sure I export a version frequently in case I need that.
I third this. I've been terrified of source control for years and relied on just doing a "Save As..." like "game_023_adding_menus" and "game_024_fixing_buttons" till I have hundreds of copies of my entire game in DropBox lol but I finally bit the bullet and tried Github Desktop and it was a bit tricky to wrap my head around but now that I'm used to it I dig it and it's cool to not have a million copies of my entire game. For anyone new to source control, this was the tutorial I used to get started:


Also my game is on my DropBox and I haven't run into any conflicting problems or anything and it's pretty comforting to know my source is backed up on DropBox, github, and I can throw it on a backup drive now and then. The only thing that breaks is if I open a different branch where a ton of files change to revert or go merge branches or whatever while my project is still open in GameMaker.

P.S. thanks to @YellowAfterlife for that awesome json beautify tutorial https://yal.cc/gamemaker-beautifying-json/ Between that and @FrostyCat's jsons struct stuff https://github.com/dicksonlaw583/JsonStruct it was basically effortless to save out beautiful easy to edit .jsons in just a couple lines of code compared to the massive blocks of code I was using before 2.3 and structs
 
Last edited:
Fixed that for you. Your YAL is in another castle. ;)
oops thanks lol

Actually I have a question for the advanced coders that I'm trying to look into on my own but just curious if anyone has tips from experience with structs & classes in other languages and all that:

Is there a general best practice or programming concept someone could point me in the direction of with regards to deciding how to organize nested constructors/classes that interact with eachother?

Like if I have this kind of nesting: GUI -> Menubars -> Panels -> Buttons

And I want a Button to do something to the GUI, is it generally better to pass the GUI's id all the way down the chain to the Button and have the Button contain code to drag that GUI around based on the Button's x/y (or whatever) which would keep the bulk of the GUI dragging code in one spot inside the Button so the other structs stay minimalist?

...or is it generally better to have the Button just tell the GUI "hey, do your drag() function" and that dragging code is inside the GUI, which ends up spreading cause & effect out over more places and requires passing more variables in the moment between the two to let the GUI know which button is affecting it to use its x/y, but the tradeoff being that the code doing stuff to the GUI is contained in the GUI constructor and the Button is just telling it to do "whatever you're supposed to do"?

The second one seems like the better option as I type this out, but do the experienced guys have general rules they follow for making decisions on whether to put code that affects other structs inside a parent or inside its child or the child of its child etc?

Or maybe a simpler question is: if I want a Button to update it's x/y based on the GUI, how do you decide if you should have the Button get the GUI's x/y or have the GUI send the Button its x/y?

I hope this question even makes sense lol Being new to this amount of nesting and combining components, I'm finding it hard to decide which constructor should contain which functions and whether I'm over-complicating things and trying to learn from tutorials in C++ or javascript is tricky because I have to figure out what actually applies to GML or how to translate it into GML...javascript seems insane, 100 tutorials for the same thing will be done in 100 COMPLETELY different looking ways lol
 
Last edited:

gnysek

Member
It's 1st October, which means Q4 2020, so we're in release window of 2.3.1 :D I see that they are releasing "Internal Beta" every 2-3 days from some time, so I believed we're close to beta release, but who know, maybe they want to pack more there, maybe one of exporters need more polishing, maybe they are working on next-gen exporters (I wish).
 

gnysek

Member
One of my spy-squirrels :squirrel: just sent me that:

1601651265364.png

I've cut rest of it, as I don't want to spoil new features before YYG (those aren't big, but there's more than dozen of them), but it seems that 2.3.1 beta is may be now "frozen" (no more new features, only bug fixes).

Also, seems that they have hide beta forums in recent few days, so maybe "closed beta" test already started today (or maybe those won't be used anymore).
 
Sequences needs more than a dopesheet curve editor and small changes. I hope there is much more to it in the next upcoming updates.
 
Last edited:

gnysek

Member
There are already 2 or 3 more updates announced, who knows what they have planned. I believe they gonna allow some more perspective animations like in Spine as they already have Spine features built in. Inverse kinematics and sprite morphing would be it.
 

Zhanghua

Member
There are already 2 or 3 more updates announced, who knows what they have planned. I believe they gonna allow some more perspective animations like in Spine as they already have Spine features built in. Inverse kinematics and sprite morphing would be it.
The chain style of inner struct function which returns self in yyc is re-executed for every node.
 

Yal

🐧 *penguin noises*
GMC Elder
no ide no happy
no ide and all play makes zanghua a dull member
no ide and all play makes zanghua a dull member
no ide and all play makes zanghua a dull member
no ide and all play makes zanghua a dull member
no ide and all play makes zanghua a dull member
no ide and all play makes zanghua a dull member
no ide and all play makes zanghua a dull member


...I've never actually watched The Shining so this is the full extent of references to it I can make.
 

ikomnen

Member
Anyone else having problem with objects not rendering in Rooms at all when you test play them with Run (F5) ?
It's latest version of GM and it worked for couple of days, but then just stopped rendering objects, tiles or any kind of graphics other then text on screen.
I have older GMS too and can go for previous release I guess, but just confused has anyone else experienced this and is it a glitch on my side or?
Thanks
 

gnysek

Member
If you got completely black screen then yeah, some people got it too. Maybe try beta from link above your post and compare?
 

ikomnen

Member
Thanks, will try that one later too.
I tried reversing to older 2.2.5 and that one went black too, so I am now more confused and scared of every 2.something version of GM,haha.
GMS1 is working as supposed to so far, and I can test some code in it, but long term will have to see what is crashing newer versions of it.
My computer is older, gfx card too, will have to check other specs too, but idk some other engines are working as supposed to.
 
Top