OFFICIAL GMS 2.3.0 BETA ANNOUNCEMENT

Ednei

Member
I converted my project over and I am getting this error message:

Compile Errors:
Object: obj_camera_PreCreate at line 2: static can only be declared inside a function

I'm not using the word "static" in the object, nor in any other objects. Has anybody else run into this issue?
When I converted my project to 2.3 for the first time, I had the same problem. In fact, my project had a variable called static. However, in this version it seems that there is also an internal function called static. Replaces all occurrences with the name staticx and solved the problem.
 

erayzesen

Member
I was trying html5 build and I had many problems on it. Sequences (with cliping masks) doesn't work well when I get a html export. Some coding functions doesn't work well too.
 

kburkhart84

Firehammer Games
When I converted my project to 2.3 for the first time, I had the same problem. In fact, my project had a variable called static. However, in this version it seems that there is also an internal function called static. Replaces all occurrences with the name staticx and solved the problem.
Yes indeed, static is used inside a constructor function to make variables of the struct it creates static(which means they only get initialized once despite the constructor being called multiple times). Since it is a keyword in GML now, it can't be used anymore for variable names, etc...
 

gnysek

Member
Then I have a giant switch-case function for each entity type, which gets an entity index passed in, and adds variables/components to the entity.
You can have one general constructor, and then create another constructs which extends it, then it still will save memory:

GML:
function A() constructor {
  health = 1;
}

function B() : A() constructor {
  some_additional_value = 2;
}

my_params = new B();
 

SIG.

Member
Is there a timeline on full release for 2.3? I want to upgrade only to keep my mobile game current with iOS/Android requirements.

I expect such widescale changes to GML will take a while to make fully stable through beta testing. It doesn't seem wise to make updates to the rest of the engine contingent on full stability with massive new, unrelated features.
 

kburkhart84

Firehammer Games
Is there a timeline on full release for 2.3? I want to upgrade only to keep my mobile game current with iOS/Android requirements.

I expect such widescale changes to GML will take a while to make fully stable through beta testing. It doesn't seem wise to make updates to the rest of the engine contingent on full stability with massive new, unrelated features.
I expect you will be able to simply upgrade to keep up, and then simply not use the new GML features until you want to. In my experience and from what I've seen, most people have been able to simply import a project and it auto-converts it. The only actual code that has to change that I know of is that it takes the script code(in resources, not events), and wraps them in a function that is named the same as the script. This lets your code simply work, calling the function as it always has, even though it gets turned into a function inside the script. The new GML lets you do much more than just a single function in that script resource, but since imported projects won't have done that yet, it doesn't affect anything. But yes, part of the beta testing has included the compatibility changes, so your project should basically just work out of the box, at the least once it is fully stable. And as stated in the other thread, I don't think there is any ETA on the stable version. It may not actually be all that much longer, considering they opened the beta to the public(instead of just internal or invite-only).
 

FrostyCat

Member
I expect such widescale changes to GML will take a while to make fully stable through beta testing. It doesn't seem wise to make updates to the rest of the engine contingent on full stability with massive new, unrelated features.
Given the kinds of type loss and inheritance anomalies still in the new GML additions, I wouldn't be surprised if there's still at least another month to go.

I too agree that the mass bundling of so many features at once in GMS 2.3, without any maintenance releases in the GMS 2.2.5 branch for 6 months, is a mistake on YoYo's part. The features could have been introduced incrementally, say new file format in 2.3.0, sequences in 2.3.1, and GML 2020 in 2.3.2. But they got carried away.

In fact, the user community got carried away too as a whole, myself included. When the AMA happened, hardly anyone raised questions on the size of the scope, or its effects on show-stoppers in GMS 2.2.5 that crop up while GMS 2.3.0 is undergoing development. We're either cheering on without much thought, or focusing on details of the release without consideration for the size of the release. And behold, those showstoppers did come up, like the PSCP issue on Catalina. If we value the continued commercial viability of GM, we have a duty to raise our objections when YoYo jumbo-sizes releases to the point that professional users will be adversely affected. We shouldn't be complicit again.
 

Amon

Member
I can't pinpoint why this happens but I'm trying my best to duplicate it. It only happens randomly. When I compile a project and it starts up, some of my sprites are switched around with other sprites. So my player sprite will sometimes, on start-up, have a sprite I use for GUI, or a sprite I use for other objects. It happens more frequently when using the android target.

I tried cleaning the project, cache folders etc but it still happens at random. This is when using the latest 2.3 Open Beta. Has anyone else had such an issue?
 

SIG.

Member
I expect you will be able to simply upgrade to keep up, and then simply not use the new GML features until you want to.
I'm not concerned about the new features interfering with my game simply through my upgrading. Or, at least, I wasn't. Hmm.

As for the new language features, they're sort of great, but my view is: (1) they're being bolted onto existing GML, which is itself more an accretion than a language, an assemblage of responses to use-cases that have arisen in the decades since GMS was click-and-make educational software, and (2) they'll probably be buggy as **** and users will need to wait for the community to provide some guidance on safe usage.
 

kburkhart84

Firehammer Games
I'm not concerned about the new features interfering with my game simply through my upgrading. Or, at least, I wasn't. Hmm.

As for the new language features, they're sort of great, but my view is: (1) they're being bolted onto existing GML, which is itself more an accretion than a language, an assemblage of responses to use-cases that have arisen in the decades since GMS was click-and-make educational software, and (2) they'll probably be buggy as **** and users will need to wait for the community to provide some guidance on safe usage.
The way GML is can be a whole 'nother discussion. That said, from what I've used of the new features, they really aren't like super buggy or anything like that. However, there are a couple of glitches that you have to be aware of, and of course you have to properly learn how to use them, if you are going to use them. But the good part is that you don't HAVE to use them until you feel like it.
 
I can't pinpoint why this happens but I'm trying my best to duplicate it. It only happens randomly. When I compile a project and it starts up, some of my sprites are switched around with other sprites. So my player sprite will sometimes, on start-up, have a sprite I use for GUI, or a sprite I use for other objects. It happens more frequently when using the android target.

I tried cleaning the project, cache folders etc but it still happens at random. This is when using the latest 2.3 Open Beta. Has anyone else had such an issue?
I've been having problems with my image_index's (seems like they have different behavior when going below 0), but not sprites themselves being incorrect. Are you using image_index's to act as separate sprites?
 

Amon

Member
I've been having problems with my image_index's (seems like they have different behavior when going below 0), but not sprites themselves being incorrect. Are you using image_index's to act as separate sprites?
Nope, no usage of image_index in that regard. I have an object who's sprite_index changes according to an imageNumber variable with a range of 1 to 6. There are 6 different sprites and I switch the sprite_index of the object, again, based off what imageNumber equals for the object.
 

erayzesen

Member
I moved back to v2.2 now. My experiences, there are too many bugs in released beta. (especially on the html5 side) I hope the developer team is aware of all these issues. I don't know the speed of the developer team,but there seems to be more time for the released stable version. And I don't recommend to move beta version for important-urgent projects now. (I have to say that I look forward to the new version and these awesome features.)

*The IDE is always asking a question about deleted resources, I'm clicking to the save button but after it's asking similar questions like that.(again and again and again....) There is a problem with the resource managment side.
*IDE often crashes and freezes.
*function foo constructor(){...} is always working but sometimes I get errors with the foo=function(){} way.
*Cliping mask of Sequence feature doesn't work well in html5 builds.
*There are too many bugs in the html5 side, I don't know where to start.

I tried the version in macos system.
 
So, structs can have constructors, but what about deconstructors? I have looked through the manual but have found nothing in relation to the delete operator. Without a handler for deletion, using structs in conjunction with data structures is essentially impossible. Since data structures are not garbage collected while structs are, it is not possible to reliably expect the struct to handle a data structure without disappearing into thin air and causing a data leak.
 

Zhanghua

Member
So, structs can have constructors, but what about deconstructors? I have looked through the manual but have found nothing in relation to the delete operator. Without a handler for deletion, using structs in conjunction with data structures is essentially impossible. Since data structures are not garbage collected while structs are, it is not possible to reliably expect the struct to handle a data structure without disappearing into thin air and causing a data leak.
Yes, we need
destructor

And we can customize by hand.
 

S_Kleer

Member
You meant this?
GameMaker Language -> GameMaker Language Overview -> Language Feature -> delete

Or I did not understand the question.
 
Last edited:

Cameron

Member
You meant this?
GameMaker Language -> GameMaker Language Overview -> Language Feature -> delete

Or I did not understand the question.
That still doesn't free any data structures from memory. It has to be done manually, freeing all data structures inside the struct, before freeing the structure, else there will me memory leaks.

Edit: Also, your link is to your local ip address, so it doesn't route anyone to any sort of documentation.
 

drandula

Member
Maybe this one helps, I had bookmarked it same time ago, but I haven't really introduced myself to it.
 
Well, the lack of destructors is not a big deal in itself, but the matter remains that there is no safe way to use data structures inside of structs. You could replace lists with arrays and maps with structs, but other data types are completely out of the question. Surfaces, buffers, even instances, all unsafe.

It really undermines the point of structs as data containers if they can't reliably contain the large majority of available data types.
 
Well, the lack of destructors is not a big deal in itself, but the matter remains that there is no safe way to use data structures inside of structs. You could replace lists with arrays and maps with structs, but other data types are completely out of the question. Surfaces, buffers, even instances, all unsafe.

It really undermines the point of structs as data containers if they can't reliably contain the large majority of available data types.
You can still implement your own GC on top of GM that handles those things. At the very least you could create one wrapper struct per resource (e.g. create a Buffer structure) and the creation of such a struct leads to it being registered in the GC system. The GC system would then check on a regular basis for which wrapper structs were deleted by GM's GC and then cleanup the corresponding resource. This of course has its own pitfalls but it is at least possible. Ofc that native support for this by GM would be much better.
 

Zhanghua

Member
Maybe we can do staff like this:
Rui Rosário
Annoyed Grunt
drandula
Cameron
FrostyCat

GML:
global.GLB_DELETE  = function (st){
    try{  for( var i=array_length(st.__delectList)-1; i>-1; i-- ){ st.__delectList[i](); } }catch(e){ }
    delete st;
}
global.GLB_RegistStructDelete =  function(st,func){
    try{st.__delectList[array_length(st.__delectList)] = func; }catch(e){st.__delectList= [func]; }
}

#macro RegistStructDelete global.GLB_RegistStructDelete
#macro DELETE global.GLB_DELETE

function test1() constructor{
    data1 = ds_map_create();
    RegistStructDelete(self,function(){
        ds_map_destroy(data1);
        show_debug_message("delete test1")
    });
}

function test2():test1() constructor{
    data2 = ds_list_create();
    RegistStructDelete(self,function(){
        ds_list_destroy(data2);
        show_debug_message("delete test2")
    });
}

test = new test2(){};
DELETE(test);

//delete test2
//delete test1
 
Last edited:
Maybe we can do staff like this:
Rui Rosário
Annoyed Grunt
drandula
Cameron
FrostyCat

GML:
global.GLB_DELETE  = function (st){
    try{  for( var i=array_length(st.__delectList)-1; i>-1; i-- ){ st.__delectList[i](); } }catch(e){ }
    delete st;
}
global.GLB_RegistStructDelete =  function(st,func){
    try{st.__delectList[array_length(st.__delectList)] = func; }catch(e){st.__delectList= [func]; }
}

#macro RegistStructDelete global.GLB_RegistStructDelete
#macro DELETE global.GLB_DELETE

function test1() constructor{
    data1 = ds_map_create();
    RegistStructDelete(self,function(){
        ds_map_destroy(data1);
        show_debug_message("delete test1")
    });
}

function test2():test1() constructor{
    data2 = ds_list_create();
    RegistStructDelete(self,function(){
        ds_list_destroy(data2);
        show_debug_message("delete test2")
    });
}

test = new test2(){};
DELETE(test);

//delete test2
//delete test1
Something like that would work. My current approach is to have a free function that just checks if the supplied struct has a free method, invoking that before deleting it. However, this means that you can only free it once and not rely on the reference counting nature of delete. If you want to have the same reference counting behavior then this approach is too simplistic.
 

Zhanghua

Member
Something like that would work. My current approach is to have a free function that just checks if the supplied struct has a free method, invoking that before deleting it. However, this means that you can only free it once and not rely on the reference counting nature of delete. If you want to have the same reference counting behavior then this approach is too simplistic.
Yes, if you want the “shared_ptr ”, and let's live in the world before C++11.....

And if the official give the function like "struct_referemce_count", that would be pleasure.
 
Last edited:

TheMagician

Member
I'm still having trouble getting the latest version of the Beta to download/install. Yoyo say they think it's not a problem on their end.

Could you do me a favour and try downloading the newest installer (23.1.1.157) from your Yoyo account and report whether this has worked or not? I've tried downloading it from different PCs and different browsers and the file always aborts downloading right before the end (around 299 of 300 MB).
 

FrostyCat

Member
Well, the lack of destructors is not a big deal in itself, but the matter remains that there is no safe way to use data structures inside of structs. You could replace lists with arrays and maps with structs, but other data types are completely out of the question. Surfaces, buffers, even instances, all unsafe.

It really undermines the point of structs as data containers if they can't reliably contain the large majority of available data types.
Surfaces and buffers are the only two items on your list that I would consider genuinely GC-unsafe. Instances are taken care of by the room lifecycle, and I've already managed to replicate all 6 ds_* data structures as structs and arrays. The biggest obstacle now is YYC and HTML5's tendency to lose track of struct and array types during heavy use.
 

gnysek

Member
I think that instead writing:
GML:
my_list = ds_list_create();
some_register_function(type.list, my_list);
it would be much simpler to make something like:
GML:
my_list = struct_ds_list_create();

  /// somewhere else
struct_ds_list_create = function() {
  var my_list = ds_list_create();
  some_register_function(type.list, my_list);
  return my_list;
}
Then we can either see a difference from normal ds_xxx, and can use much less code (and don't need to remember about enums).
 

Liam Jacobs

Member
Is it possible to test the GMS 2.3 beta as a trial user? I've been waiting for this to drop so that I can finally decide whether or not to finally upgrade to GMS2.
 

Toque

Member
Is it possible to test the GMS 2.3 beta as a trial user? I've been waiting for this to drop so that I can finally decide whether or not to finally upgrade to GMS2.
Go into your download page and see if it’s there. My guess is it won’t be as it’s a paid product. But not sure???? There are YouTube videos that go over the features. Should be enough there to decide.
 

TheMagician

Member
Since I've written about installation issues in a couple of posts, let me inform you that Yoyo Support has acknowledged the issue (it only seems to happen when you try to install from certain countries) and it has been marked as fixed for the next Beta release.
 
While I don't doubt that there are surely plentiful workarounds for the GC issue, I feel like looking for them is missing the point. Asking the user to manage memory by themselves is fine, providing a garbage collector is also fine, but a half-working solution is bound to create confusion. As simple as it may be I don't feel like anybody should be expected to do extra work or install an extension just to make sure basic functionality works the way it should work to begin with.
 

gnysek

Member
Just noticed that Roadmap is finally updated 10 days ago! https://help.yoyogames.com/hc/en-us/articles/231719448-RoadMap

However, they didn't fit into Q2 with 2.3.0 as today Q3 starts, so it's again outdated :p except they plan 2.3.0 stable release this week, which I doubt.

I still wonder, what Sequences phase 2 and 3 can be. Free transform tool for sprites? some updates directed to make GUIs using sequences (define healthbars, score fields, etc) ? particle editor (there's DLL placeholder, layout, and several language strings included with beta that suggest it) ? so many questions, so little time until Q3 and Q4...
 

kburkhart84

Firehammer Games
They really didn't update anything that I see, except the times when they expect to actually do things. They basically just pushed stuff back.

That said, I DO see the autocomplete showing a bunch of functions and constants in the beta about "physics particles." I wouldn't expect physics simulated particles, but at the least it makes me wonder if I should hold off on making my particle system(after I do some other things that have higher priority) and maybe roll more into maybe the visual shader editor I want to do. Either one of these will be a big time investment so if they are really going to be making a new particle system it may be worth my while to NOT do my own.

EDIT********

Those phy_part functions are for the soft body physics. @gnysek can you explain what you see about the "DLL placeholder, layout, and language strings"?
 
Last edited:

gnysek

Member
Those phy_part functions are for the soft body physics. @gnysek can you explain what you see about the "DLL placeholder, layout, and language strings"?
Inside beta installation folder:
1593677950447.png
Inside layouts:
1593678076497.png
Inside Languages/english.csv
1593678031723.png

However, those can't be enabled in any way, and are just placeholders for future use. May come one day, may not.
 

Yal

🐧 *penguin noises*
GMC Elder
While working on these things...
1593684735229.png
...how about also adding standard copypaste mechanics to the image editor? (Allowing copying image data to clipboard so it can be pasted into other editors, pasting image data from clipboard into GM, being able to click-and-drag the pasted data around so it's easier to make small adjustments when pasting a really big image). Being able to easily copypaste data between GM and Photoshop / GIMP / Inkscape / whatever should more or less remove the need for the GM graphics editor to have effects in the first place, and make a lot of common editing tasks easier.


Also, I'd really like seeing hotkeys for next/previous image in the image editor as well, when you do some batch editing (e.g. adjust palettes of a repaletted enemy with the color replace tool) it gets really straining to have to click to change images and then move the mouse back to where it just was to apply the change again. I had to do this close to a thousand times yesterday (~50 sprites with ~20 subimages each all requiring touchups) and my hand still hurts.
 

gnysek

Member
...how about also adding standard copypaste mechanics to the image editor?
My main issue with using current image editor is, that when image loose focus, but the IDE has it, I can't paste anything. So copypaste seems to not work properly many times, and I always need to click inside actual image, or I can't paste (create a brush in fact). Then, when copying frames, it again works different. So yeah, I would like to see fixes in copy-pasting for whole image editor (especially some visual indication what is focused now, and where I can paste or not).
This aspect needs a bigger rewrite.
 

kburkhart84

Firehammer Games
Inside beta installation folder:
View attachment 32469
Inside layouts:
View attachment 32471
Inside Languages/english.csv
View attachment 32470

However, those can't be enabled in any way, and are just placeholders for future use. May come one day, may not.
Thanks for showing me. Of course since there is no public info on it, I have no idea if they are actually going to expand on the particle system they have, or just make an editor in the IDE for the current system. Back in the day they removed a few things from the particle system to make it more performant for mobile....but I think they should have left them in and made them optional instead. Things like colliders, forces, etc... are easily handled on PC(and really even modern mobile devices often enough). That's why I'd like to make my own particle system, basically a 2d version of the best of what Unity's does, using gradients instead of just 3 values for the parameters.
 

gnysek

Member
If they gonna touch particles in any way, I'm pretty sure first they gonna add what now exists into sequences, then they can look into extending them. I would really like to have any editor inside IDE, and after we tried beta, sequences doesn't seem to have any unfinished features, so they must have some new ideas if they are mentioned in roadmap. Particles or text layers are the first two that comes into my mind, that already exists, but aren't covered yet.
 

kburkhart84

Firehammer Games
If they gonna touch particles in any way, I'm pretty sure first they gonna add what now exists into sequences, then they can look into extending them. I would really like to have any editor inside IDE, and after we tried beta, sequences doesn't seem to have any unfinished features, so they must have some new ideas if they are mentioned in roadmap. Particles or text layers are the first two that comes into my mind, that already exists, but aren't covered yet.
Going by what you showed me above, they seem to be adding a particle editor...this means that particle systems would be an asset/resource I would think(they wouldn't make us copy/paste gml like we have to do for external editors would they?!?! 😅). So I'm guessing that they very well could add those resources to be similar to sprites and instances as far as sequences goes, just one more thing to be added to them, and likely animated/simulated as it goes.

I personally am looking for something more like the particle system they have now...just modernized and overall much better. I wouldn't care if it gets put into sequences(as you could have objects in sequences invoke them anyway). I see the validity of integrating everything possible into sequences though, making it as good of a tool as possible.
 
Top