Hard to tell? Demo room #1 creates a 200x200 window and displays its dimensions in there
YellowAfterlife
Creator of
Recent community posts
I don’t have Unity installed right now, but that probably means that they decided to re-set the icon on their own.
You would need to add a window message hook that intercepts the attempts to change icon and passes your saved icons instead.
In the GameMaker/C++ version that looks like the following:
LRESULT window_command_proc_hook(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
if (msg == WM_SETICON && window_icon_hook.enable) {
HICON icon;
switch (wp) {
case ICON_SMALL:
icon = window_icon_hook.icons[0];
break;
case ICON_BIG:
icon = window_icon_hook.icons[1];
break;
default: icon = NULL;
}
if (icon != NULL) lp = (LPARAM)icon;
}
return CallWindowProc(window_icon_hook.base, hwnd, msg, wp, lp);
}
void window_icon_hook_ensure(HWND hwnd) {
if (window_icon_hook.base == nullptr) {
window_icon_hook.base = (WNDPROC)SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)window_command_proc_hook);
}
}
As ever, all function signatures and typedefs can be taken from pinvoke.net
You can find the previous release on Wayback Machine but this isn’t very good at all - I guess the font library that I use either introduced a bug in the version I updated to (while the git version breaks kerning for some reason) or changed what you’re supposed to give it to get a color font.
The current version should be working on everything starting from GM2022/LTS and to the latest 2024.11.
Beta versions of GM are at your own risk - these tend to break (and then unbreak) random GML functions and it’s not always possible to make a workaround even if you figure out what did happen this time around.
For the most part I only have to update GMLive when there are breaking changes to project format or GML functions - for example, I’ll have to release a patch for whatever that’s going on for some people here soon.
And if you open the previous version on Wayback Machine, does that work?
https://web.archive.org/web/20250126224026/https://yal.cc/r/20/pixelfont/
Ascent and Descent are in em units, not in pixels. There’s an overlay when you move your mouse over the input image showing ascent/descent.
I can’t tell what this glyph of yours is supposed to be, but you can try ascent=896, descent=128, linegap=0 (and adjust your Baseline Y to be, well, at the baseline).
Types (such as for :type
or @jsdoc
types) in GMEdit are assumed to be global, which means no constructors in events / functions / other constructors.
You can use /// @hint to describe any types that GMEdit didn’t pick up automatically.
Long-term I would like to support more esoteric uses, but realistically most of the time that I spend on GMEdit is now used to fix endless YY format compatibility issues that each new IDE release introduces.
Check that the game directory contains display_mouse_lock_x64.dll
;
display_mouse_lock
returns whether it could lock the cursor - for example, you cannot lock the cursor when the game window does not have focus (so you might do this in a Step event).
The latest NT build was made with IDE v2024.11.0.179 Runtime v2024.11.0.227 and Steamworks 1.60, so probably the same as yours.
I can definitely add something if there’s a way to retrieve this that does not involve me reverse-engineering the NVIDIA driver (pretty sure that all settings are stored in that multi-megabyte e nvdrsdb0.bin
file) or setting up a brand new Win11 install in a VM to figure out what registry path the setting gets stored in (if at all).
How do I change the controls I didn’t understand from the readme file
See my comment below
And can is there a way to make the game fullscreen
Press Alt+Enter
I suppose you can do this then (at the end of obj_gmlive’s Create event):
var _register = function(_type, _get_name) {
var _ids = asset_get_ids(_type);
for (var i = 0, n = array_length(_ids); i < n; i++) {
var _id = _ids[i];
var _name = _get_name(_id);
live_constant_add(_name, _id);
}
}
_register(asset_sprite, sprite_get_name);
_register(asset_sound, audio_get_name);
_register(asset_object, object_get_name);
_register(asset_room, room_get_name);
And I’ll fix this in the next release.
A little concerning though, isn’t it? There have not been gaps in asset IDs ever since GameMaker: Studio released, almost a decade and half ago.
Ah, I suppose your script runs before GMLive’s initialization? You could make it
if (!live_enabled) enemies_struct();
in the script and add
if (live_enabled) enemies_struct();
to the end of obj_gmlive’s Create.
Or rename the “GMLive” script to “__GMLive” so that it runs before the rest. Kind of silly but that’s the world we live in starting with last year’s updates.
You can override gameframe_caption_draw_border to draw the border the way you like.
The default behaviour can be found in gameframe_caption_draw_border_default
.
However, if you are using the default border sprite, it should already stay as it is (only the caption fades) so you might mean something else.
Depends on what’s in the script!
If it’s just struct assignments that are done once on game start, you’d want to wrap them in a
function some_init() {
global.a = { ... };
...
}
some_init();
because global script init is a little quirky to resolve from GML.
Then you can use live_code_updated to re-run the (updated) script when a new version is loaded.