GMEdit gets the user folder name from um.json, so if the GM IDE logs you out (which it now does more often!), GMEdit can’t figure out where it’s supposed to look for your project state files.
YellowAfterlife
Creator of
Recent community posts
As per note that shows when you hold the mouse over the “color font” option, support varies - for these to semi-consistently show up across major browsers, you need to supply 4 (!) different color font formats, and the library that I use to generate the final TTF/OTF fonts only implements one.
Hm, so I imported the gameframe test project into the same GM version as you’re using, and it seems to work normally, including with this
if (keyboard_check(vk_space)) {
window_set_position(window_get_x(),window_get_y())
show_debug_message("re-positioned!");
}
If you can send me an email, I can send you a YYZ and you can see if you can get it to misbehave
Generally makes me think that you have something else going on that causes this weird interaction.
The plan was to work on NTT around mid-December after I finish fixing bugs in the base game, but in the past week Russia has renewed interest in destroying energy infrastructure in my region so it might take a while longer.
Currently you can access the latest NTT version on the “ntt_development” branch on Steam. It doesn’t have u100 content yet, but does have more or less all bug fixes/optimizations.
An actual u100 NTT version will come slightly later because I’m also the person that fixes most of the weird bugs in the update.
On Windows and Linux, display_mouse_get_x and display_mouse_get_y poll the current mouse coordinate directly from the system, but you are still bound by when the game finishes drawing and the window contents update.
The system cursor, on other hand, is drawn on spot whenever the system sends the image to the display, so that’s always slightly ahead of what you can get by drawing in-game.
Yeah, that’s not great - there are two main ways to hide a taskbar button, and this is the one that doesn’t cause oddities due to having a second hidden window.
In 2024.14 you have to tick the “Use legacy DXGI_SWAP_EFFECT_DISCARD” checkbox
Send me an email with the font file if you might, but if I were to guess, you are going past 65535 kerning pairs total and FontHX (the underlying font generator library) doesn’t know that it should split them into multiple kerning sub-tables at that point.
Writing yourself a script that adds kerning pairs using FontForge’s API could be a workaround.
If your game is non-commercial, you can compile the extension from source code and use it. It does take a little effort though.
In the description you can find links to the blog post explaining how I did everything and to the source code. The latest Godot versions have stencil buffer support so it’s now possible to do this slightly better, but I haven’t had time to experiment with this myself.
Built-in enums are new and a bit of a funny matter because they are defined in fnames like this
AudioEffectType#*
??AudioEffectType
Bitcrusher?#*
Delay?#*
Gain?#*
HPF2?#*
LPF2?#*
Reverb1?#*
Tremolo?#*
PeakEQ?#*
HiShelf?#*
LoShelf?#*
EQ?#*
Compressor?#*
But you can do this for now in the end of obj_gmlive’s Create event
var e:live_enum = live_enum_create_builtin("AudioEffectType");
e.h_add("Bitcrusher", AudioEffectType.Bitcrusher);
// ... more h_add() calls for enum items
I recommend using 1.4.1804, but if you have to use a version where macros and function overriding don’t work, you’ll have to delete the gameframe_macros.gml file from the extension using GM IDE (“expand” the extension resource, then right-click the file), rename the one use of __display_set_gui_maximise_base in gameframe.dll to be display_set_gui_maximise, and restore GUI size manually after calling gameframe_draw.
Window Freeze Fix avoided the freeze on moving the window by embedding a borderless game window into another window, but this revealed to have a number of caveats
Gameframe avoids the issue by drawing a custom frame in Draw GUI event and simulating the common window operations (move, resize, maximize, etc.) with either what GM offers out of box or through a DLL.
For included files, you can open their properties (using the three-line menu in the asset browser) and untick all platform checkboxes for them. These are supposed to be unticked after importing the extension, but something happens sometimes somewhere along the way.
If that doesn’t do it, you can move the GMLive folder out of datafiles to sit in your project folder - it’s not in Included Files because it has to be there, but because this is the easiest way to bundle some files that will be easily observable by the user and will update when you re-import the extension.
Ultimately, flipping live_enabled to false (manually or using a configuration - see above) is the only thing that matters here. The server the simpler part of the extension and isn’t useful on its own.
Per description, this is a DLL for Windows, so it works on Windows.
Some platforms have their own APIs for per-device input, but these are all different enough that it would be a complete rewrite for each platform.
Keyboard/mouse input is second-class on consoles so I would be surprised if any had a way to poll these individually.
Hello!
The extension doesn’t try to perfectly mimic the Windows title bars/borders because the most reliable way to do that is to have a secondary window wrap around the game window, which is what Window Freeze Fix did, and which is why it had so many oddities - although nested windows are a core feature of Windows, plenty tools don’t expect games and software to use this or don’t handle the various edge cases.
Fullscreen transitions are done using gameframe_set_fullscreen.
This isn’t about the server, but rather that live_call is what runs the live-reloaded version of the event/function once we have one - you can’t just do obj_some.create = new_function or scr_some = new_function in GML.
JS live reload is different because typically (like with nodemon or live.js) it simply restarts the app / reloads the page on JS changes. On GM terms this is an equivalent of compiling-running the game again and saving-restoring the window position or using window_embed_into to insert the game window into a container window.
I’m not getting any other errors in your test project with these settings either, but are you getting the original method_get_self error after making these changes? I’m noticing that your screenshot above doesn’t have it
If you are only getting it in your main project with latest GMLive, you could find this bit
static h_set_func = function(l_func) {
var l_rawFunc;
if (is_method(l_func)) {
l_rawFunc = method_get_index(l_func);
var l__self = method_get_self(l_func);
and replace it with
static h_set_func = function(l_func) {
var l_rawFunc;
if (is_method(l_func)) {
l_rawFunc = method_get_index(l_func);
var l__self;
try {
l__self = method_get_self(l_func);
} catch (e) {
l__self = undefined;
show_debug_message("Error getting method self for " + self.h_signature + ": " + string(e));
}
Can you also post a screenshot of your HTML5 preferences? I’m doing this here (is that the default?)
and I’m not seeing your error, but I’m seeing some other things:
audio_group_name crashes for lack of an audio group
Where did it go

You can find this bit
for(var l_i=0;l_i<256;l_i++){
var l_agn=audio_group_name(l_i);
if(l_agn==undefined||l_agn==""||l_agn=="<undefined>")break;
live_api_asset_add(l_agn,l_i);
}
And replace it with
for(var l_i=0;l_i<256;l_i++) try{
var l_agn=audio_group_name(l_i);
if(l_agn==undefined||l_agn==""||l_agn=="<undefined>")break;
live_api_asset_add(l_agn,l_i);
}catch(_){}
Sprite reloading
After fixing the sprite_set_live call to use the right sprite, it turns out that you can’t buffer_save ➜ sprite_add anymore..? But that’s okay, 2024.11 supports Data URIs, so you could find this
var l_tb=buffer_base64_decode(ds_list_find_value(l_frames,l_i1));
if(l_tb==-1){
live_log_script("Error: couldn't decode base64 for "+l_name+".",2);
continue;
}
buffer_save(l_tb,l_tmp);
buffer_delete(l_tb);
and replace it with
if (os_browser == browser_not_a_browser) {
var l_tb=buffer_base64_decode(ds_list_find_value(l_frames,l_i1));
if(l_tb==-1){
live_log_script("Error: couldn't decode base64 for "+l_name+".",2);
continue;
}
buffer_save(l_tb,l_tmp);
buffer_delete(l_tb);
} else l_tmp = "data:image/png;base64," + ds_list_find_value(l_frames,l_i1);
… but that will not save you, for sprite_assign is non-functional on latest runtime - the sprite becomes transparent and its sizes are reported as -1.
Perhaps you could workaround this by rewriting that whole block of code to use sprite_replace ➜ sprite_add_from_surface, but I wouldn’t be too hopeful about stability of those functions either.
That is the latest server; the extension version is printed to Output/browser console (see above), or you can check the build date in the beginning of “Extensions ➜ GMLive ➜ GMLive” script. With sufficiently poor luck you may have to remove the Extensions ➜ GMLive folder before re-importing a new YYMPS.
For debugging, you’ll want to press Continue a few times until you get to this error in particular, though if you are completely unfamiliar with using a debugger, you might instead email me your test project after you make sure that the extension is the newest version.
If you tick “pause on caught extensions”, the debugger will pause when this error happens and you will be able to click through the previous items on the Call Stack to see which function it was going over when this happens.
However, I have just re-downloaded the latest YYMPS from Itch, imported it into a new project, and that works fine:
Entering main loop... test23.js:85325:47
[GMLive][28/09/2025 22:26:36] GMLive.gml v1.0.76 for GM2022+
[GMLive][28/09/2025 22:26:36] Initializing...
[GMLive][28/09/2025 22:26:36] Indexing assets...
[GMLive][28/09/2025 22:26:36] Indexed OK!
Audio Engine => Loading
[GMLive][28/09/2025 22:26:36] Trying to connect to gmlive-server...
Application Surface created: w=640, h=360
Audio Engine => Suspended
[GMLive][28/09/2025 22:26:36] Ready!
Are you sure that you are on the current version of GMLive? Based on your gmlive-server build date, it seems that you are on 2024.2 minifix from March last year, and I have to fix something related to HTML5 support after every other GM update.
Hard to tell, the extension passes unit tests on my end, and I don’t think I have changed anything HTML5-related since the last public release.

If this is in Safari, you could try another browser. If that doesn’t do it either, run in debug mode and enable “pause on exceptions” + “pause on caught exceptions” on Sources/Debugger tab of browser’s Developer Tools so that you can see what function is causing trouble.














































































