• Hey Guest! Ever feel like entering a Game Jam, but the time limit is always too much pressure? We get it... You lead a hectic life and dedicating 3 whole days to make a game just doesn't work for you! So, why not enter the GMC SLOW JAM? Take your time! Kick back and make your game over 4 months! Interested? Then just click here!

OFFICIAL GMS 2.3.0 BETA ANNOUNCEMENT

Status
Not open for further replies.
Being an owner of GM2 since Nov'16 and this update being the first I am interested in. It's been a long time and I must admit, I am somewhat disappointed that I have to wait even longer, after the closed beta. Just being honest here. The reasoning for the current approach seems strange to me, too. Aren't beta-testers that don't submit bugs the more common problem?

Oh, well. :confused:
I am sure the game developers who make a living and spend 14 hours a day with GM are more disappointed than you are that they didn't get in. :p
 

Zhanghua

Member
Not quite...



The struct will still exist in memory after being deleted, as it's only the struct reference that is immediately deleted. The struct itself has only been flagged for cleaning in the next iteration of the garbage collector.
Is the "delete" a safe operation just like the std::shared_ptr of c++?
 

ZeDuval

Member
I am sure the game developers who make a living and spend 14 hours a day with GM are more disappointed than you are that they didn't get in. :p
To port an existing, commercial game, right now, before the update is even out of beta, ...? Me, I just want to play around with it and try out weird stuff. Thats super important to me. :p
 
D

Deleted member 45063

Guest
Is the "delete" a safe operation just like the std::shared_ptr of c++?
Delete will undefine the variable with the reference. Other than that, the gc runs between steps, so the actual memory release will happen outside any game action. And it will only delete unreferenced structs. So I'd say that unless there is some bug in the reference counting (or you actively try to make it fail somehow) the operation should be quite safe.
 

Zhanghua

Member
Delete will undefine the variable with the reference. Other than that, the gc runs between steps, so the actual memory release will happen outside any game action. And it will only delete unreferenced structs. So I'd say that unless there is some bug in the reference counting (or you actively try to make it fail somehow) the operation should be quite safe.
That's good!
 

xDGameStudios

GameMaker Staff
GameMaker Dev.
To port an existing, commercial game, right now, before the update is even out of beta, ...? Me, I just want to play around with it and try out weird stuff. Thats super important to me. :p
I speak for myself.. as a full time game developer I'm not interested in porting any project and I guess no indie (nor AAA) company would even consider that.
NOTE: And I would advise not to port a serious project into a beta version.
But I kinda wanted to spend some of my working time developing the base libraries... to ease the porting process later down the road.
 

matharoo

manualman
GameMaker Dev.
I speak for myself.. as a full time game developer I'm not interested in porting any project and I guess no indie (nor AAA) company would even consider that.
NOTE: And I would advise not to port a serious project into a beta version.
But I kinda wanted to spend some of my working time developing the base libraries... to ease the porting process later down the road.
Yup, all of my main projects are still in 2.2.5. But I am gonna try and make a jam game this weekend, with 2.3. Hope that goes well :D
 

xDGameStudios

GameMaker Staff
GameMaker Dev.
I have one question regarding Animation Curves, if anyone from the staff can answer. @Nocturne @rmanthorp

Why Animation Curve, and not only Curve?
As far as I can see Animation Curves can also be used to represent for example stats in an RPG game/ or a growth rate for something else.. they could be named just that Curves :p
I could imagine myself using curves for other stuff.. and having my code full of "animation" functions xD

Ohhh wait... I can just alias the built-in functions ;)
 
D

Deleted member 45063

Guest
I'm just thinking, that maybe delete some_struct; is the same as some_struct = undefined;, as other references to same struct seems to remain and not gc it.
The difference seems to be that delete will (supposedly) poke the GC to clean that struct if it is the last reference. Although on a very quick test I did some days ago that didn't seem to be the case, but maybe I just interpreted the GC stats wrongly.
 
D

dcm

Guest
question, do structs have their own 'id' after being made? like ds list, grids, ect do? or does each instance of a struct HAVE to be stored in a variable? for example, I could store multiple ds_list within a ds_grid just by id.

for blablabla
for blablabla
var _list = ds_list_create()
grid[# x, y] = _list

For example grid[# 2, 2] would just point directly to the list in memory and not a variable holding the list because a local variable was used and thrown away. so can we store structs within grids without variable names?
 

xDGameStudios

GameMaker Staff
GameMaker Dev.
GML:
var _list = ds_list_create()
// _list will not point to a list in memory it will hold the index to a row in a (hidden) table where lists are stored :P
// what I mean is that it's not a POINTER to a place in memory ;)
QUICK EXPLANATION:
GML:
var a = ds_list_create();
// this function doesn't return a list nor a pointer it returns a number

show_debug_message(a); // prints a number for example 0 or 1 or 2....

var b = { name: "MyStruct" };
// this returns a struct

show_Debug_message(b); // prints the actual struct (serialized into a string)
But I get your idea ;)
When you create a struct is like creating an array

GML:
var a = []; // a is the "actual" array (it's not an index)

var b = {} // b is the "actual" struct (it's not an index)

// you don't need to delete structs the same way you don't need to delete arrays
// BUT you can (and probably should if you're not using them anymore) :)
so yes they HAVE to be stored in a variable! :)
GML:
// you can (but shouldn't) do this:

ds_list_create(); // Please don't do it.. always store your variables

// you CANNOT do this

{ a: 10, b: "Name" }; // This will not compile

// you have to assign it to a variable :P
if you are talking about the need to use an intermediate variable to store data before assigning it to the grid you don't need to do it with any structure in GMS2

GML:
// you don't need the extra variable there (independently)

for (...)
{
    grid[# x, y] = ds_list_create();
}

for (...)
{
    grid[# x, y] = [ "MyArray" ];
}

for (...)
{
    grid[# x, y] = { a: 10, b: "MyStruct" };
}
 
Last edited:
  • Love
Reactions: dcm

Nocturne

Friendly Tyrant
Forum Staff
Admin
(For the infinite depth question, I didn't mean literal infinity, but rather wondered if there was an artificial limit of some sort... especially if that limit is one child sequence, so child sequences can't in turn have sequences in them).
Well, not as far as I know. I suspect the limit would simply be how much memory your machine has to handle them.

Why Animation Curve, and not only Curve?
No idea, but if I had to guess, it's because they were only ever going to be applied to sequences, but as things progressed it was realised that this doesn't actually have to be the case.
 

xDGameStudios

GameMaker Staff
GameMaker Dev.
@Nocturne are the offices closed for the day...or better saying are emails responses closed for today?! 😇

I'm just thinking, that maybe delete some_struct; is the same as some_struct = undefined;, as other references to same struct seems to remain and not gc it.
The idea that i'm getting is that:

delete my_struct will force the gc to act but... if you still have references to the struct the gc will not collect it. That or it is a bug.

for example if you only have ONE reference to it:

GML:
var a = { x: 10, y:50 };
a = undefined;
// this will not make the GC kick in
// it could stay in memory for some steps

// WHILE

var a = { x: 10, y:50 };
delete a;
// this will make sure GC step in at the end of THIS step!
I might be wrong though don't have a way to test it :p
 
Last edited:
Hey @Nocturne, are Spine sprites/objects supported for sequences? I use Spine a lot, and was planning on using sequences for Spine cutscenes and etc.

Thanks for spending your time and answering everybody's questions btw. :)
 

kburkhart84

Firehammer Games
No idea, but if I had to guess, it's because they were only ever going to be applied to sequences, but as things progressed it was realised that this doesn't actually have to be the case.
My first idea was to simply use them as an easing function. My easing thing will have the common 30 equations, and then I'll set it up to interface with animation curves so you can make your own.
 

Nocturne

Friendly Tyrant
Forum Staff
Admin
Hey @Nocturne, are Spine sprites/objects supported for sequences? I use Spine a lot, and was planning on using sequences for Spine cutscenes and etc.
Yes and yes. Spine sprites can be used in a sequence, although (iirc) you won't see the animation for them when you play back the sequence in the editor, only at runtime. And yes, objects (or rather, instances of objects) can be placed in a sequence too.
 
Yes and yes. Spine sprites can be used in a sequence, although (iirc) you won't see the animation for them when you play back the sequence in the editor, only at runtime. And yes, objects (or rather, instances of objects) can be placed in a sequence too.
Awesome! Yeah, I can imagine this is going to be extremely helpful for me!
 

Hyomoto

Member
question, do structs have their own 'id' after being made? like ds list, grids, ect do? or does each instance of a struct HAVE to be stored in a variable? for example, I could store multiple ds_list within a ds_grid just by id.

for blablabla
for blablabla
var _list = ds_list_create()
grid[# x, y] = _list

For example grid[# 2, 2] would just point directly to the list in memory and not a variable holding the list because a local variable was used and thrown away. so can we store structs within grids without variable names?
This is a semi complex question but the answer is yes and also no. Yes in that they are unique references and will be passed as such, and no they aren't ids as you might think of them in GMS2.2
 

Yal

🐧 *penguin noises*
GMC Elder
For example grid[# 2, 2] would just point directly to the list in memory and not a variable holding the list because a local variable was used and thrown away. so can we store structs within grids without variable names?
Basically, you can store anything that a variable can hold into a variable these days. And a grid cell is a variable, it's just a part of a two-dimensional variable. (Normal variables are zero-dimensional, lists and arrays 1D, and grids 2D)
 
Alright, the Sequences editor is awesome! Having a lot of fun in it. One thing I can't figure out though: is there a way to change the interpolation on my tweens? Everything is straight tweens by default, but we have animation curves now. Can I use those in the sequence editor somehow to control how tweens between keyframes are weighted? I want to do some easing in and easing out without using a bunch of keyframes. Also, the manual says we can change the interpolation mode of the animation curves themselves, but I don't see where? :x

Sorry if it's obvious or covered in the manual. (Probably both, lol)
Thanks guys. If I figure it out, I'll edit this post with what I got.
 

Nocturne

Friendly Tyrant
Forum Staff
Admin
Alright, the Sequences editor is awesome! Having a lot of fun in it. One thing I can't figure out though: is there a way to change the interpolation on my tweens? Everything is straight tweens by default, but we have animation curves now. Can I use those in the sequence editor somehow to control how tweens between keyframes are weighted? I want to do some easing in and easing out without using a bunch of keyframes. Also, the manual says we can change the interpolation mode of the animation curves themselves, but I don't see where? :x
To change the interpolation type, Right Click on the Parameter track in the Track Editor and select "Interpolation" from the menu. Note that unless you use anim curves, all tweens are either linear or instant (off). To add an animation curve to a parameter track, right click in the Dope Sheet on the parameter track and select one of the two options "Convert To Embedded Anim Curve" or "Set To An External Anim Curve". Note that the first option creates a unique animation curve for the track that can be edited like an asset curve.

As for the docs, check out the section Editors > Sequences > full page plus the Links At The Bottom. You'll probably find the page "Using the Dope Sheet" the most helpful, but I do recommend reading them all. The Sequences Editor is powerful and has LOT to learn.

:)
 

gnysek

Member
but we have animation curves now
I've also got a problem with this at beginning, but setting curves is under right click on parameters (scale, position etc) on color bars and it's worth noting, that animation curve need to have at least same amount of curves than the parameter you want to change. So you can't set a curve with one path for scaling, this curve need to have two paths (also not > 2). GMS filters those, and some won't be visible.

Ex:

1588200184178.png

There are two curves in asset tree, but only one displays for "set external anim curve". It's because first one have only one curve/path set, which isn't enough for parameter that I'm animating.

1588200275589.png

What's fun - you can play with curves during sequence preview is playing, and it will have live preview.
 
@gnysek: Thanks friend! Yeah, I'm starting to figure this out. It's a very cool editor.

ONE suggestion/request for curves: a way to add "noise" between two points, basically just creating a bunch of new points between two points and then moving them up or down a small, randomized amount. This would be super useful for stuff like lighting (having torches flicker while they slowly turn up to light up the room) and animating enemies - users could key up the main movements of a zombie goat boss (for example ;) ), and then with a bit of random noise, make his hands jitter slightly so that he looks like he's creaky and undead. Make bugs move around in an arc with key frames, but then have them zip around a tiny bit for fly-like movements, etc.

Easy enough to add in code after the fact, I guess (or maybe I can just do this in the editor with the sequence's step event...?), but I figured I'd throw it out there in case it's super easy. Noise is a great animation function to have!

That said, I'm having a ton of fun right now. This editor is amazing, and is going to save me weeks or months worth of work. Thank you, YYG .<3 =)

edit: OH, also - the animation seems unnaturally smooth in the editor right now, so I'm assuming it's using pixel interpolation instead of being pixel perfect. Is there a way around that? I know that setting up my camera correctly in game will have it render correctly anyway, but for pixel art stuff, a pixel or two makes a big difference in the feel of an animation, so trying to animate with interpolation on is less than ideal!
 

K3fka

Member
Is the documentation that was posted not working for anyone else? Specifically the sidebar that should have navigation is completely blank, and it appears to have a javascript error:
Code:
Uncaught TypeError: Cannot read property 'TITEMS' of undefined
    at helpcontents.html:21
and the line in question is
GML:
chmtop.c2wtopf.jstree = new MakeTree(chmtop.c2wtopf.TITEMS, false);
Tried it in Chrome, Firefox, and Edge and same results in all of them.
 

Zhanghua

Member
Is the documentation that was posted not working for anyone else? Specifically the sidebar that should have navigation is completely blank, and it appears to have a javascript error:
Code:
Uncaught TypeError: Cannot read property 'TITEMS' of undefined
    at helpcontents.html:21
and the line in question is
GML:
chmtop.c2wtopf.jstree = new MakeTree(chmtop.c2wtopf.TITEMS, false);
Tried it in Chrome, Firefox, and Edge and same results in all of them.
Report this in the 2.3 bug area.
 

Cameron

Member
Is the documentation that was posted not working for anyone else? Specifically the sidebar that should have navigation is completely blank, and it appears to have a javascript error:
Code:
Uncaught TypeError: Cannot read property 'TITEMS' of undefined
    at helpcontents.html:21
and the line in question is
GML:
chmtop.c2wtopf.jstree = new MakeTree(chmtop.c2wtopf.TITEMS, false);
Tried it in Chrome, Firefox, and Edge and same results in all of them.
If they normally process the sidebar with server side code then I'm sure it's disabled. I haven't viewed source or anything on the local documentation we have but it's possible they are just html pages without javascript or any sidebar interaction. Keep in mind this documentation was rushed out to appease people who don't have access to the new beta update.
 
G

Gravedrinker

Guest
Oh man, sequences and curves seem like a great addition. Can't wait to try that out. Too bad the current project is too far along already, but I'm looking forward to using these additions in my next projects. (And experiments until then).
 

Nocturne

Friendly Tyrant
Forum Staff
Admin
ONE suggestion/request for curves: a way to add "noise" between two points, basically just creating a bunch of new points between two points and then moving them up or down a small, randomized amount. This would be super useful for stuff like lighting (having torches flicker while they slowly turn up to light up the room) and animating enemies - users could key up the main movements of a zombie goat boss (for example ;) ), and then with a bit of random noise, make his hands jitter slightly so that he looks like he's creaky and undead. Make bugs move around in an arc with key frames, but then have them zip around a tiny bit for fly-like movements, etc.
Make a post on the beta forums as a feature request. :)

edit: OH, also - the animation seems unnaturally smooth in the editor right now, so I'm assuming it's using pixel interpolation instead of being pixel perfect. Is there a way around that? I know that setting up my camera correctly in game will have it render correctly anyway, but for pixel art stuff, a pixel or two makes a big difference in the feel of an animation, so trying to animate with interpolation on is less than ideal!
This is an interesting point, and I'd also say that it should be filed on the beta forums as a feature request.
 

FoxyOfJungle

Kazan Games
Is it possible to use Animation Curves to do Easing and Tweening like this?




I know I have these scripts that do this, but when it is built-in it is much better.
 

Nocturne

Friendly Tyrant
Forum Staff
Admin
Is the documentation that was posted not working for anyone else? Specifically the sidebar that should have navigation is completely blank, and it appears to have a javascript error:
Yeah, this is because the files are actually supposed to be viewed in the GMS2 IDE and probably have some dependencies on that. Please do not file a bug for this, as the documentation posted here is simply a courtesy to the community so you can get an idea of the new features, and as such, the issue with the sidebar is not relevant to the current beta. You can still navigate the pages fine using the links and page footer controls.
 
H

Homunculus

Guest
Is the documentation that was posted not working for anyone else?
It doesn't work for me when opened locally, it requires a web server apparently. You can either install a local environment with something like MAMP (just install, put the manual in its htdocs folder and start the server) or place them on a host.
 
D

Deleted member 45063

Guest
It doesn't work for me when opened locally, it requires a web server apparently. You can either install a local environment with something like MAMP (just install, put the manual in its htdocs folder and start the server) or place them on a host.
If you have Python in your system you can do the following in the command line
Python:
# both of these will create a local web server serving the directory from which they were executed
python -m http.server PORT      # for Python 3.x
python -m SimpleHTTPServer PORT # for Python 2.x
 
H

Homunculus

Guest
If you have Python in your system you can do the following in the command line
Python:
# both of these will create a local web server serving the directory from which they were executed
python -m http.server PORT      # for Python 3.x
python -m SimpleHTTPServer PORT # for Python 2.x
Being a PYgnorant, I had no idea python comes with a web server. Good to know for simple cases like this one
 
Status
Not open for further replies.
Top