Asset - Extension GMLive.gml - live-coding for GML! (and all other sorts of real-time asset reloading)

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
banner.png
Links: blog post · itch.io · marketplace · documentation
Price: USD 29.95 (itch) / USD 39.99 (marketplace)
GIFs: livecoding a visual effect in GMS1 · tweaking things in GMS2 · initial teaser
Modules (GMS2): all
Modules (GMS1): all but HTML5 (bug wasn't resolved before EoL)
Versions: GMS1, GMS2

GMLive is an extension that introduces livecoding / interactive programming into GameMaker: Studio and GameMaker Studio 2 (incl. Mac IDE).

That is, it allows to reload chosen scripts or events mid-game when they are changed from the editor - without having to recompile and restart the game.

This allows to save tremendous amounts of time during development, especially for projects and platforms with longer compile time.

The extension works with all modules - you can even have the code update remotely while the game's running in a browser, on a mobile device, or on a console.

It also has some additional features:
The extension is stable, documented, easy to use, and takes literal minutes to set up (see video).

If there are any questions, do ask. Have fun!
 
Last edited:
F

Felipe Rybakovas

Guest
Just wanna say that this is great!

Really... Thanks.


And just another thing... a had an issue with the macros... I had to import my Default to All configuration to be located.


But again, thanks, this is great.
 
7

7bones

Guest
How with performance in big projects? Will it cost a lot of FPS while testing?
 

rIKmAN

Member
This looks very cool - great job as always @YellowAfterlife.

Is there any difference between the itch version and the marketplace version?
I ask as I notice there is a ~$10 price difference.
 
This looks very cool - great job as always @YellowAfterlife.

Is there any difference between the itch version and the marketplace version?
I ask as I notice there is a ~$10 price difference.
itch.io version ends up being ~25% cheaper due to rounding downwards after subtracting revenue cut difference (GM:Mc takes 30%, itch takes 10% or custom amount), so you can pick between paying a few dollars less and being able to quickly view/install the extension from the IDE.

 
S

Sam (Deleted User)

Guest
For crying out loud YYG, hire this man!
Agreed. I can't imagine all the good he could do for GameMaker as an official developer of it. I mean look at him now, he's already doing so much! I think @YellowAfterlife and @zbox are probably the two most experieced extension makers in the community.

@YellowAfterlife This looks really interesting. I have no direct need for it, but I can't imagine how much work this must have been to create.
 
F

Felipe Rybakovas

Guest
@YellowAfterlife , Im having a issue using arrays during live code.

[live][01:32:19] Runtime error: gml_Script_draw_tooltip_container[29:24] Row index (11) is out of bounds (0..5 excl.)

The code :
colorOut= magic_arr[i,11];

Array creation:
//MAGIC BAR ARRAY
magic_arr[0,11] = 0; //PRIMARY ATK / MOUSE L - ZR
magic_arr[1,11] = 0; //SKILL ATK / MOUSE R - R
magic_arr[2,11] = 0; //SKILL ATK / E - L
magic_arr[3,11] = 0; //SKILL ATK / Q - ZL
magic_arr[4,11] = 0; //ULTIMATE ATK / SPACE - B


Can advice please ?
Thank you!
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
And just another thing... a had an issue with the macros... I had to import my Default to All configuration to be located.
Oh, I can probably fix that - I forgot that per-configuration macros are stored separately in GMS1.

How with performance in big projects? Will it cost a lot of FPS while testing?
Only the scripts containing live_call are interpreted, so project size has no effect on performance.
@YellowAfterlife , Im having a issue using arrays during live code.

[live][01:32:19] Runtime error: gml_Script_draw_tooltip_container[29:24] Row index (11) is out of bounds (0..5 excl.)
That's an equivalent of a normal GML error - you are trying to read something outside the array on line 29, column 24; "row" is the first of two indexes.
 
Last edited:
F

Felipe Rybakovas

Guest
That's an equivalent of a normal GML error - you are trying to read something outside the array on line 29, column 24; "row" is the first of two indexes.
So that is the issue.

The game compiles normally... without errors. The error happens with the GMLive compiler...

to apply the changes I need to close and run it again..
Im 100% sure that I´m accessing it right.
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
So that is the issue.

The game compiles normally... without errors. The error happens with the GMLive compiler...

to apply the changes I need to close and run it again..
Im 100% sure that I´m accessing it right.
If the project isn't overly big/secret, please PM me a GMZ so that I can debug what's different.
If it is, try reproducing the error on a blank project by copying related bits of code over to it.
 

rIKmAN

Member
@YellowAfterlife
Looking at the visual effect video it seems that you can add draw calls and have them live update - would this also work for actually changing the sprite completely (ie. live reloading a whole new sprite)

Also would live reloading work with Spine sprites?
Things such as changing the actual sprite / skeleton used (as above) and live updating slots/attachments, using the skeleton_* functions to manipulate the skeleton data in realtime and changing animations etc?

Sorry if these are silly questions, but I know the Spine stuff is handled differently by GMS on the backend (texture pages and such) so I thought it was worth asking before I make the purchase.

Thanks.
 
Last edited:
A

Arconious

Guest
Hey YellowAfterLife,

Thanks much for making this! I very much appreciate the extensions you've thus created.

In trying to integrate this with my current project, I've run into a few snafus:

1) live_call_ext() / live_defcall() do not seem to be included with my package/extension. (I am using GMS2, bought from Yoyo Marketplace). Image for reference.

2) I make heavy use of your TJSON extension, but it appears I have to make sure any of those tj_get/set function calls are nested within individual scripts themselves, otherwise GMLive reports 'tj_get is not a function or a script'. This applies to other extensions as well, per your documentation. Is my understanding here correct?

3) I kept getting a "Not a constant expression" error on scripts/events that included the 'live_call' function, including the base obj_gmlive object:
Code:
[live][12:09:07 AM] Ready!
[live][12:09:07 AM] Error in obj_gmlive:Draw_0:
[live][12:09:07 AM] Not a constant expression
[live][12:09:07 AM] Error in ActorStateAttack:
[live][12:09:07 AM] Not a constant expression
This one I am at a loss for, and I accept that it is highly likely it is just my ineptitude in some fashion here. 'ActorStateAttack' was the only script I placed the live_call functionality in thus far, and the script does not take any arguments directly. It does call a series of other scripts, but do each of those need to the live_call functionality within them in order to properly function?

For reference:
Code:
///ActorStateAttack()
if ((stateMethod & STATE_METHOD_START) == STATE_METHOD_START)
{
    AbilityActivate(actorCurrentAbility);
    var _abilityAttributeList = actorCurrentAbility[abilitySlot.abilityAttributeList];
    var inputAnimation = actorCurrentAbility[abilitySlot.animation];
    var inputDuration = actorCurrentAbility[abilitySlot.durationMax];

    AnimationObjectsSetAnimation(id, animationObjects, inputAnimation);
    AnimationObjectsSetDuration(animationObjects, inputDuration);
 
    if (isWeaponEquipped)
    {
        drawWeaponEnabled = true;
    }
   
    actorAbilityDirection = actorCurrentAbility[abilitySlot.direction];
    velocity[vec2.x] = 2 * actorAbilityDirection;
    actorMoveDirection = sign(velocity[vec2.x]);
 
    stateMethod = stateMethod ^ STATE_METHOD_START; //Reset toggle to off
}


if ((stateMethod & STATE_METHOD_STEP) == STATE_METHOD_STEP)
{
    ActorApplyFriction(velocity, actorMoveFriction);
    if (!isOnGround)
        ActorApplyGravity(velocity, actorMoveGravity);
    //ActorCallStateMethod(actorStates.move, STATE_METHOD_STEP);
    MovementUpdate();
}


if ((stateMethod & STATE_METHOD_DRAW) == STATE_METHOD_DRAW)
{
    //Draw Setup
    image_xscale = actorAbilityDirection;
    AnimationObjectsUpdate(id, animationObjects);
}
 
Last edited by a moderator:

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
1) live_call_ext() / live_defcall() do not seem to be included with my package/extension. (I am using GMS2, bought from Yoyo Marketplace).
Just published a new version that fixes that mishap.
2) I make heavy use of your TJSON extension, but it appears I have to make sure any of those tj_get/set function calls are nested within individual scripts themselves, otherwise GMLive reports 'tj_get is not a function or a script'. This applies to other extensions as well, per your documentation. Is my understanding here correct?
Should also be fixed in new version. Depending on factors, may need to change "tj_true" and alike macros in extension from just "g_tj_true" to "global.g_tj_true" because that was relying on globalvar declaration in another file but I did not derive the exact globalvar<->macro relationship/compilation order in GML yet.
3) I kept getting a "Not a constant expression" error on scripts/events that included the 'live_call' function, including the base obj_gmlive object:
This is most likely it not being able to figure what value something is in an enum somewhere, but this particular error was missing position information. New version should show the actual file-row-column of what it's upset about.
@YellowAfterlife
Looking at the visual effect video it seems that you can add draw calls and have them live update - would this also work for actually changing the sprite completely (ie. live reloading a whole new sprite)

Also would live reloading work with Spine sprites?
Things such as changing the actual sprite / skeleton used (as above) and live updating slots/attachments, using the skeleton_* functions to manipulate the skeleton data in realtime and changing animations etc?

Sorry if these are silly questions, but I know the Spine stuff is handled differently by GMS on the backend (texture pages and such) so I thought it was worth asking before I make the purchase.

Thanks.
GMLive only handles code updates for the time being. Texture information (and specifically Spine data) is largely unexposed in GM so it is not possible to modify these things at runtime without substantial reverse engineering (and violation of GMS and Spine licenses in process).
 

rIKmAN

Member
GMLive only handles code updates for the time being. Texture information (and specifically Spine data) is largely unexposed in GM so it is not possible to modify these things at runtime without substantial reverse engineering (and violation of GMS and Spine licenses in process).
Ah I see, thanks for clearing that up regarding Spine.
 
A

Arconious

Guest
Thanks for the fast update!

I hate to be a bother, but unfortunately I'm still having difficulty getting my project to comply with having only the obj_gmlive containing any live_call functionality. After you pointed out the meaning behind the error (and with the handy line references you added), I was able to determine that GMLive does not appreciate storing script references in enums and an enum that had a staggered index count that used macros of which are just integer amounts. Whenever it hit an enum it did not appreciate, it would error out with:
Code:
[live][10:35:41 PM] Ready!
[live][10:35:41 PM] Error in obj_gmlive:Draw_0:
[live][10:35:41 PM] enum items [L3,c13] Not a constant expression
ERROR!!! :: ############################################################################################
FATAL ERROR in
action number 1
of Draw Event
for object obj_gmlive:


trying to index a variable which is not an array
 at gml_Script_live_call (line 20) -             var l_name=l_pg[13];
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_live_call (line 20)
called from - gml_Object_obj_gmlive_Draw_0 (line 2) - if (live_call()) return live_result;
Code:
[live][10:35:41 PM] Ready!
[live][10:35:41 PM] Error in obj_gmlive:Draw_0:
[live][10:35:41 PM] enum items [L3,c13] Not a constant expression
ERROR!!! :: ############################################################################################
FATAL ERROR in
action number 1
of Draw Event
for object obj_gmlive:


trying to index a variable which is not an array
 at gml_Script_live_call (line 20) -             var l_name=l_pg[13];
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_live_call (line 20)
called from - gml_Object_obj_gmlive_Draw_0 (line 2) - if (live_call()) return live_result;

For reference, the enum's I had it error out on were:
Code:
#macro BASE_HELM_ITEM_INDEX        10000
#macro BASE_ARMOR_ITEM_INDEX    20000
#macro BASE_RING_ITEM_INDEX        30000
#macro BASE_WEAPON_ITEM_INDEX    40000

enum items {
    noItem,
    ironHelm    =    BASE_HELM_ITEM_INDEX,
    steelHelm,
    jellyHelm,
    hoodedHelm,
    _countHelm,
    armor1        =    BASE_ARMOR_ITEM_INDEX,
    armor2,
    _countArmor,
    ring1        =    BASE_RING_ITEM_INDEX,
    ring2,
    _countRing,
    woodsword1    =    BASE_WEAPON_ITEM_INDEX,
    silversword1,
    woodhammer1,
    etc...
    _countWeapon
}

enum actorStates {
    idle            =    ActorStateIdle,
    move            =    ActorStateMove,
    jump            =    ActorStateJump,
        etc
}

I recognize this may just be a symptom of funky/improper enum use, so feel free to tell me as such.
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
Whenever it hit an enum it did not appreciate, it would error out with:
I uploaded a hotfix (1.0.5) shortly after 1.0.4 yesterday to fix that (only occurred if the original script wouldn't compile).
I recognize this may just be a symptom of funky/improper enum use, so feel free to tell me as such.
That's not entirely wrong (in fact, that's first time I see someone use asset IDs as enum values), but I uploaded a new version (1.0.7) that should be more more forgiving to such use cases.
 

kburkhart84

Firehammer Games
Quick question(considering purchase)...is there not a nice automatic way to remove this stuff for exports/builds? I notice you state in the documentation to to change a certain macro, which makes the scripts all simply return default values instead of actually executing...but if you do this you still have any and all of those script calls, which can reduce performance. Or would simply removing the object you put in the first room and any calls to the live* scripts be enough to restore full performance? I miss "live coding" from Unity's system in GMS2, but I wouldn't want to sacrifice performance to achieve it.
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
but if you do this you still have any and all of those script calls, which can reduce performance
GameMaker evaluates constant expessions compile-time, so
Code:
if (1) trace("yes"); else trace("no");
becomes trace("yes"), and
Code:
if (0) trace("oh");
simply vanishes.

All of the extension's scripts are structured like
Code:
if (live_enabled) {
// script code
}
so flipping that macro strips out all of the extension code entirely, and calling a completely empty script doesn't take very long at all.

Still, you can have if (!live_enabled) instance_destroy() in obj_gmlive and have your "live" lines like
Code:
if (live_enabled && live_call()) return live_result;
but the later are usually commented out once you are done messing with the given bit of code, and calling a single empty script per game frame isn't much of a concern.
 

kburkhart84

Firehammer Games
So the trick is to add the live_call() line to only a few scripts at a time anyway for performance according to the documentation. Once done working with that set of scripts you can comment the line out of course. And your persistent object(the one you add to the first room), it does nothing if no live_call() scripts are called?

I'm wondering if you set that macro could it instead simply destroy itself? I'm sure you would run into issues if someone tries to use the system in those cases(though that problem is created by the user). Is that just a decision you made for that reason?
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
And your persistent object(the one you add to the first room), it does nothing if no live_call() scripts are called?
if live_enabled is 0, it does nothing. If live_enabled is 1, it'll still try to ping the live-server because the game itself has no way of knowing what code it contains and if any of it uses live_call.

I'm wondering if you set that macro could it instead simply destroy itself? I'm sure you would run into issues if someone tries to use the system in those cases(though that problem is created by the user). Is that just a decision you made for that reason?
At this time you can safely destroy the object yourself without any consequences if live_enabled == 0, or have it self-destruct if the server doesn't respond to the first ping (recently asked), or on any other condition - it's role is to run initialization on game start and then send/receive HTTP requests from the local server, none of which happen if live_enabled is false. The code can also be surrounded by if (live_enabled) { } and moved to any custom persistent controller if potentially wasting ~1 microsecond per game frame is an issue.
 

kburkhart84

Firehammer Games
I'm probably overly picky about this kind of thing...so I'd likely just have the object destroy itself if the macro is flipped. It would be my risk as far as making sure I deleted the code enabling live edit on scripts. I don't mind the little bit of performance hit during testing, as it would get me Unity-like live code editing, quite useful for many things. Consider me a customer, since it provides a quite useful feature and the slight drawbacks won't affect the final products.

EDIT****

I added $5 to the purchase price. This is one of those things that I see being extremely useful. You are welcome :)
 

kburkhart84

Firehammer Games
I just had a thought(new info, new post). I wonder how good of an idea it would be to use macros for this. You can have macros be defined differently for different configurations, so if I have one for debug, one not, I should be able to make things automatic. One macro would be quick code to create in code the controller object, and if not in debug mode it would be blank(or a comment). Another macro would be similar, but for the live_edit() script. Instead of placing the controller in the room editor, I would create it in my first controller objects code(or even in the room init code event) using that macro so it doesn't actually happen if not in debug mode.

As a suggestion, I think you could make this a method of use automatically included in your extension(for GMS2 at the least). Macros can be defined in any script, so you could easily put it in your scripts somewhere. It would have to simply be an alternative way to do things though, especially since GMS1 can't do it the exact same way(not with extensions I mean, and macros not being created in scripts).
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
I just had a thought(new info, new post). I wonder how good of an idea it would be to use macros for this. You can have macros be defined differently for different configurations, so if I have one for debug, one not, I should be able to make things automatic. One macro would be quick code to create in code the controller object, and if not in debug mode it would be blank(or a comment). Another macro would be similar, but for the live_edit() script. Instead of placing the controller in the room editor, I would create it in my first controller objects code(or even in the room init code event) using that macro so it doesn't actually happen if not in debug mode.

As a suggestion, I think you could make this a method of use automatically included in your extension(for GMS2 at the least). Macros can be defined in any script, so you could easily put it in your scripts somewhere. It would have to simply be an alternative way to do things though, especially since GMS1 can't do it the exact same way(not with extensions I mean, and macros not being created in scripts).
GMS2 version has the macro defined in obj_gmlive itself. I don't think you can define configuration-specific code in extensions? Even if that seemed like a good idea (given that everyone can name configurations as they please)
While I appreciate everyone's enthusiasm about macros in GMS2, I don't think "put this magic text" is an easier to understand concept than "put an instance of this object" (which does reasonably imply that you can also create or not create it with code).

Having macros for if (live_call(...)) lines makes a bit more sense, but, unless something changed in the recent update, GMS2 doesn't allow to use argument#/argument[] in a macro.
 

kburkhart84

Firehammer Games
Good points about configs and macros...I forgot about the fact that people name their configs as they please.

However, the example for macros in the manual specifically states you can put a function call there, with arguments. Maybe I missed exactly what you meant, but for sure you can put functions as part of macros, and it will actually call that function each time you reference the macro(according to the manual). The example uses the following macro.
Code:
#macro col make_colour_hsv(irandom(255, 255, 255)
It then says that using that code would return a different color each time. So for the purposes of the live_call() function, it makes good sense, and I'd say at least on a personal level my other suggestion makes sense, although maybe not for something you can add to your extension...maybe something you document as simply a possible way to use it?!
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
New update is now out!

This is a big one, adding support for live updating sprites as well.
You call sprite_set_live, and then you can edit the images/origin/collision mask from GMS1/GMS2/external software, and it'll show up in-game as soon as the file is saved.
yep-2.gif
yep-3.gif
 

kagamma

Member
Thanks for the update! I just test the new version and I can access deactivated instances and call return without errors now.

About hexadecimal prefix issue I still get "Expected a statement, got gml_node_Ident" error.
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
Apparently I forgot to update this thread for a little bit, but since my last post here I have made GMLive compatible with GMS2 HTML5 module, and am currently working on shader live reloading!
gmlive-shaders-12.gif
For the initial release I'm targeting Windows with this, but may later be able to expand the functionality to support HTML5, and, possibly, Mac/Linux;
Since the helper extension for this introduces a literal shader_replace function, it may also prove handy for other purposes (much like live_execute_string does).
 

gnysek

Member
Gosh, I was refusing so long to buy it and now I don't believe I didn't tossed a coin for this extension before! It might be the most expensive I ever bought, but I can say it was worth it from first minute!

It already saved me 10 minutes of recompiling during last 5 minutes of work... incredible. There was a question before how this impact big projects in case of performance... I would say, the bigger the project, the more you can save if it's used properly - because you saves minutes lost for compile otherwise. Especially to test things like moving something by one pixel ;)
 

Cameron

Member
@YellowAfterlife I'm getting an error. I swapped out the old version of gmlive with this new version and trying to load the gmlive_server.exe from gmedit and getting an error message saying "Windows cannot find C:/Users/Username/Desktop/Folder/GameFolder/Game/datafiles/GMLive/gmlive...

Looking at the git status shows "deleted: Game/datafiles/GMLive/gmlive-server.exe" among other deleted files and a file that says "modified: Game/datafiles_yy/GMLive/gmlive-server.exe.yy"

edit: For the record I'm using GMLiveForGMS2.yymp for GMS2.2.5x
 
Last edited:

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
@YellowAfterlife I'm getting an error. I swapped out the old version of gmlive with this new version and trying to load the gmlive_server.exe from gmedit and getting an error message saying "Windows cannot find C:/Users/Username/Desktop/Folder/GameFolder/Game/datafiles/GMLive/gmlive...

Looking at the git status shows "deleted: Game/datafiles/GMLive/gmlive-server.exe" among other deleted files and a file that says "modified: Game/datafiles_yy/GMLive/gmlive-server.exe.yy"

edit: For the record I'm using GMLiveForGMS2.yymp for GMS2.5x
The YYMP definitely contains the server exe, try reimporting?
Code:
Listing archive: GMLiveForGMS2.yymp

--
Path = GMLiveForGMS2.yymp
Type = 7z
Physical Size = 469011
Headers Size = 654
Method = LZMA2:22 BCJ
Solid = +
Blocks = 2

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2020-01-28 19:24:43 D....            0            0  datafiles
2020-01-28 19:24:43 D....            0            0  datafiles\GMLive
2020-01-28 19:24:43 D....            0            0  datafiles_yy
2020-01-28 19:24:43 D....            0            0  datafiles_yy\GMLive
2020-01-28 19:24:43 D....            0            0  extensions
2020-01-28 19:24:43 D....            0            0  extensions\GMLive
2020-01-28 19:24:43 D....            0            0  objects
2020-01-28 19:24:43 D....            0            0  objects\obj_gmlive
2020-01-28 21:24:38 ....A            0            0  extensions\GMLive\GMLive.yy._
2020-01-28 21:24:38 ....A         2460       331524  assetpackage.yy
2020-01-28 21:24:38 ....A       179392               datafiles\GMLive\gmlive-server.n
2020-01-28 21:24:38 ....A        56046               datafiles\GMLive\gmlive.html
2020-01-28 21:24:38 ....A       207360               datafiles\GMLive\regexp.ndll
2020-01-28 21:24:38 ....A       148480               datafiles\GMLive\std.ndll
2020-01-28 21:24:38 ....A          448               datafiles_yy\GMLive\gcmt-dll.dll.yy
2020-01-28 21:24:38 ....A          458               datafiles_yy\GMLive\gmlive-server.exe.yy
2020-01-28 21:24:38 ....A          454               datafiles_yy\GMLive\gmlive-server.n.yy
2020-01-28 21:24:38 ....A          446               datafiles_yy\GMLive\gmlive.html.yy
2020-01-28 21:24:38 ....A          440               datafiles_yy\GMLive\neko.dll.yy
2020-01-28 21:24:38 ....A          446               datafiles_yy\GMLive\regexp.ndll.yy
2020-01-28 21:24:38 ....A          440               datafiles_yy\GMLive\std.ndll.yy
2020-01-28 21:24:38 ....A       536903               extensions\GMLive\GMLive.gml
2020-01-28 21:24:38 ....A      1504633               extensions\GMLive\GMLive.yy
2020-01-28 21:24:38 ....A        66682               extensions\GMLive\GMLive_nodeTools.gml
2020-01-28 21:24:38 ....A       355732               extensions\GMLive\GMLive_std.gml
2020-01-28 21:24:38 ....A          487               objects\obj_gmlive\Create_0.gml
2020-01-28 21:24:38 ....A          161               objects\obj_gmlive\Draw_0.gml
2020-01-28 21:24:38 ....A           18               objects\obj_gmlive\Other_62.gml
2020-01-28 21:24:38 ....A           14               objects\obj_gmlive\Step_0.gml
2020-01-28 21:24:38 ....A         2292               objects\obj_gmlive\obj_gmlive - Copy.yy
2020-01-28 21:24:38 ....A         2292               objects\obj_gmlive\obj_gmlive.yy
2020-01-28 19:24:43 ....A         3675               yymanifest.xml
2020-01-28 21:24:38 ....A       116224       136833  datafiles\GMLive\gcmt-dll.dll
2020-01-28 21:24:38 ....A       195784               datafiles\GMLive\gmlive-server.exe
2020-01-28 21:24:38 ....A        84480               datafiles\GMLive\neko.dll
------------------- ----- ------------ ------------  ------------------------
2020-01-28 21:24:38            3466247       468357  27 files, 8 folders
 

gnysek

Member
Yeah, it should work - I'm using the latest one for sure, as I bought it two hours after shaders update - so no errors for me. I would also reccomend completely removing extension (and gmlive object) and adding it from scratch again (ensuring all was erased from disk in project directory).

I wonder how it will deal with inline functions in GMS2.3... hope you've got access to closed beta to already test it ;)
 

Cameron

Member
Seems it was a corruption on my end. After I tried throwing everything into a "trash" branch and nuking it I went back to my local branch and still couldn't use my older version of gmlive. I ended up having to restart my computer and then re-install the new version of gm live and now everything seems to be working fine. So, false alarm.

I also just purchased the live shader and downloaded it. Looking forward to testing and take advantage of it :)

Thanks again for your awesome contributions to this game engine!
 

gnysek

Member
Yeah, my project became such a big in last two days, that normally I would need more than week for it.
 

Jihl

Member
Hey there! I'm having problems by using :
if live_call() return live_result

on any script that handles arguments. Is this supposed to work that way? If not, could anyone teach me?

Also thank you so much for creating this extension! It is immensely useful!
 
Last edited:

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
Hey there! I'm having problems by using :
if live_call() return live_result

on any script that handles arguments. Is this supposed to work that way? If not, could anyone teach me?

Also thank you so much for creating this extension! It is immensely useful!
Hello! You need to add argument0, argument1, ... inside the parenthesis to pass them along to GMLive.
See the documentation for live_call/live_call_ext: https://yal.cc/r/17/gmlive/#live_call
 

Jihl

Member
Hi again YellowAfterlife, I'm having mini-freezes on the GMS2 IDE every 10 seconds or so, and also whenever I save the project (Without having the server console for updating scripts nor the game running!). It is a project with 2 large rooms (8000x8000) and it has a decent amount of sprites, scripts and objects

I have confirmed that this happens only when I have the extension imported from the marketplace.
I hope something can be done about this because the extension has been really helpfull until now.

Again, thank you!
Jihl
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
Some news!
  1. I released a version of the extension that is compatible with GMS2.3 beta!
  2. I released an update for GMS2 that fixes various small bugs/complaints!
 
Good evening, I apologize for disturbing you. I am writing to you because your plugin interests me particularly but being a student without a monthly income, I would like to make sure that this plugin is beneficial for me.

I am new to GMS2, I bought it with my savings a few months ago and it was a huge investment for me, however, I didn't think there would be so many plugins to buy for creating games in a comfortable way.

I saw that you have 40 plugins, if I have to buy them all it might be too big an investment for me.
Nevertheless, I noticed GMLive because it was the most expensive product in the Marketplace that I spotted and when I saw that it was possible to directly see what we are writing, I thought to myself that if I had to buy a plugin, it would be this one, at worst, I will not eat for two days to afford it :)

However, I have read somewhere that it could have generated some compatibility issues or other problems.

Is the installation easy? How are the updates going? If I buy it on the marketplace, these will be automatic or do I have to install them manually? If there is no difference, I will probably buy it on Ich.io since it is cheaper there.

Before Game Maker, I used RPG Maker MV which introduced javascript, but wishing to create a different game, in a particular style, I leaned on Game Maker Studio 2 rather than Unity or Unreal even if these are not uninteresting.

Thank you for taking the time to read my message, depending on your answer, I will see to acquire your plugin which seems to be unanimous among the users.
 

YellowAfterlife

ᴏɴʟɪɴᴇ ᴍᴜʟᴛɪᴘʟᴀʏᴇʀ
Forum Staff
Moderator
I saw that you have 40 plugins, if I have to buy them all it might be too big an investment for me.
Buying every asset I ever made would indeed be a big investment, but I don't think there's anyone that could realistically use all of these at once - roughly half of them are intended for very specific circumstances.

I noticed GMLive because it was the most expensive product in the Marketplace that I spotted
There are plenty of similarly priced or more expensive extensions that do something more exotic (like mobile ads, or video playback), but I guess what you mean.

However, I have read somewhere that it could have generated some compatibility issues or other problems.
I generally fix any issue that is reported and is either on my end or does not take a lot of effort to workaround.
See itch.io discussions for reports and resolutions.

Is the installation easy?
Can be done in under a minute:

How are the updates going?
I have recently updated the extension to work with GMS2.3+ and then some more to fix issues that people found
1598566887765.png

If I buy it on the marketplace, these will be automatic or do I have to install them manually?
GameMaker does not auto-update extensions, but you can check for updates from your library (try adding a free asset and then pick menu:Marketplace - My Library in IDE).
When logged in on itch, you can "follow" an account, which will send you occasional email digests about the author's new releases/project updates.

If there is no difference, I will probably buy it on Ich.io since it is cheaper there.
The extension is the same. At some point I started pricing my assets based on the platform cut (Marketplace takes 30%, itch takes 10%), so you can see plenty of my assets being slightly cheaper on itch.
 
Thank you for your prompt reply @YellowAfterlife I assume that a skilled programmer like you already created games.

Among your plugins, which ones would you highlight for people like me? As you have summed up very well, there are plugins for different needs.

GMLive should have been included in Game Maker, and I support the previous comment inviting YoYo to hire you, which would allow all of us to benefit from your talents at the cost of GMS2 or GMS3 why not.

I know it is feasible to use GMS2 without GMLive but seeing videos not using this plugin, I have no doubt about the need to have a product like yours, moreover, it seems to me as well on RPG Maker, GMS2 or other Game Engine, it is not possible to modify these codes directly live.

Would not be against being introduced to others of your highly useful and valued community products. I like to play and create complex multiple choice games. It was certainly much easier on RPG Makers. I also use Articy Draft 3 but the integration is not directly compatible with GMS2 unlike Unity.

In any case, you made me want to buy your plugin on itch.io, I'm waiting to have the means to acquire it. I was just very worried about the stability of GMS2 when using a plugin like yours. I wonder why the developers of GMS2 did not include the live modification in the basic software, it is however essential and saves a considerable time.

Hope you'll introduce me to some of your other valued product I haven't had the chance to notice on the Marketplace so that I don't miss useful plugins. Even if most of them aren't useful for me right now, we never know if I'll ever need them in the future, depending on the game I create.

Just one last thing, given your undeniable talent for creating quality plugins, I'm curious to see what games you have made with GMS2. Indeed, with such mastery of GML, you have managed to create plugins approved by all, without any negative evaluations. Such a genius is certainly very good at creating video games.
 
Top