Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics


A member registered Oct 01, 2014 · View creator page →

Creator of

Recent community posts

I intend to address this soon - Mac builds were recently changed in GMS2 to produce 64-bit binaries (and use 64-bit extensions as result), but I've not yet managed to get the extension to work with that (primarily due to being overloaded with other tasks as-is). If there's a sense of urgency and you know your way around the basics of compiling with gcc+/g++, send me an email from your purchase address and with your order reference (find it here), and I'll send you the source code + current build files to try things out with.

Kind of hard to guess from that, but try restarting Steam or attempting to connect again after 15-20 seconds - if Steam takes too long to establish the connection to someone, you'll get a connection timeout, but subsequent attempts should take less time.

You cannot have "true" overloading in a dynamically typed language - the IDE cannot possibly show matching auto-completion because it has no clue what types variables or values are, and having a script do different things based on incoming argument is only fun up until you do so on accident.

#args schema is influenced by JavaScript's default parameters, as that's the safest way of doing this by a margin; both GMS and GMEdit support same syntax in function doc lines.

Apparently the issue with both is that, since it is the frame window that is in focus rather than the game (though it is a child of it and takes input), it is not counted as active and will not take inputs. Not actually sure if there's an easy fix, but if you know anyone experienced with WinAPI and willing to help, you can have them look at the source code.

It is possible that child rooms count as some different resource type or are not where most resources are. I'll need to check

(1 edit)

Oh, that's possible - only the other day I had a conversation with someone about how low-level UDP libraries usually do not do URL resolution+caching automatically, and... well, I guess the one I used here doesn't either.

I'll see if this can be addressed later.

Does the same happen if you connect to yourself over localhost / could you get me dumps of the actual packets? It seems like the client is considering the connection to be broken as soon as they get the first packet.

There's this issue with GMLive.gml where if I'm to add new functions to it's script wrappers, it will no longer work with any preceding GM runtime (throwing an error about missing functions on compile).

A workaround for now is to make a script that calls the function in question,

/// @desc scr_collision_rectangle_list(x1,y1,x2,y2, obj, prec, notme, list, ordered)
return collision_rectangle_list(argument0, argument1, argument2, argument3, argument4, argument5, argument6, argument7, argument8);

and link it up at the end of obj_gmlive's Create event like so:

gml_func_add("collision_rectangle_list(x1,y1,x2,y2, obj, prec, notme, list, ordered)", scr_collision_rectangle_list);

It does seem like on the current GM version buffer_[get|set]_surface functions are once again broken on WebGL so it works only with WebGL disabled (Global Game Settings - HTML5 - Graphics)

Not sure if there's a good workaround tbh

I have answered that exactly one comment below yours.

You can do so by adding a counter variable to obj_gmlive and changing obj_gmlive's Async - HTTP event to be like

if (live_async_http_check()) {
    if (!live_is_ready && ++retry_counter > 5) instance_destroy();

Someone else asked about this before so I'll see about adding a built-in thing later

All available technical details are on the blog.

My extension for interfacing with Steam networking/matchmaking backends in GameMaker is publicly available.
Other engines have their own tools (sometimes built-in, sometimes not).

Patching is engine and version specific. For GameMaker you'd probably be looking at tools made for Undertale as that had grown the largest modding community as far as tinkering with file formats goes.

Actual networking can be done very differently game-to-game (this isn't specific to modding) and engines can be more or less fit for specific kinds of networking - search around for details on what people have been doing for similar games.

Ah, sorry. I didn't pay enough attention to your first message.

  1. It'd take an entirely different system to minimize to tray instead.
    If you are able to pay for that (rough estimate is $100..$150 depending on features), that could be implemented into this or a separate extension.
    (if you are wondering, this extension similarly exists only because someone sponsored the development and was fine with it being made publicly available)
  2. Conventional (DirectX) fullscreen rolls up on the monitor that it was initialized for, so usually the primary one.
    It's usually possible to move the game window between screens via Win+Shift+Left/Right, but I'm not sure if you could cheat it by pressing those keys via keyboard_key_press.
    If window_set_rect has any effect in fullscreen (or you are fine with borderless fullscreen), I could modify my other extension to return screen XYWH per monitor index.

Someone had this same issue half a year ago and editing the file worked for them, but they did not clarify what else they had an issue with. If you can send me an email from your purchase address, I can email you a version with these three functions removed.

That makes it a little hard to diagnose. Is there anything in the compile form? Does it happen if you import the extension to a blank project?

1. See the example from Window Commands extension, this one has the same-styled functions.
2. Disabling border (see the example attached) would allow you to call window_set_fullscreen as usual.

Please open the console (Ctrl+Shift+I, Console tab) and send the error that pops up there.

Known issues at this time are limited to GMEdit not being able to open GMS1 projects on Mac/Linux because GMS1 used Windows-only backslashes at a few points in formats.

To change max hp, add

maxhealth = 4;

to "create" script. (variables)

To explode on death, add

if (fork()) {
    var _x = x, _y = y;
    wait 1;
    if (!instance_exists(self)) { // we're dead!
        instance_create(_x, _y, Explosion);

to "step" script. (fork)

If your app is marked as freeware (or was marked at the moment of registering the App ID), you will need to contact Valve for them to enable matchmaking API for your app.

Forward, not backward. Beta builds are on Discord (see link in itch description) and the current beta is 9935

For custom weapons, the ID is a string with weapon file name, so "some_wep.wep.gml" -> "some_wep". Also see if the problem occurs in the beta version if you aren't on that yet, I think there was some issue in 9921.

It varies

What error is your friend getting?

Are you both using the same connection type (steam or by IP)?
If using Steam, you shouldn't need to open ports as that's on Steam.
If connecting by IP, you'll need to make sure that the port is open and that the game is allowed in firewall.

You most likely have a mismatch between what you read and what you write - for example, if you write an u32 but then read u8,u32, u32 would be "overflowing" beyond the payload and off by 8 bits (so *256).

Dragging and dropping the YYMP file onto the workspace area (not the resource tree) should do the trick.

Other option is to extract YYMP into a directory (it's just a ZIP archive) and then pick the .yy file from there in "add existing" dialog for extensions.

Apparently GMS1 function list didn't even list the ds_map_set function, which is used for m[?k]=v accessor.

You can workaround this by adding a script called, say, scr_ds_map_set that'd do

ds_map_set(argument0, argument1, argument2)

and then adding

gml_func_add("ds_map_set(id, key, value)", scr_ds_map_set);

to the end of GMLive's create event.

I'll fix this in the next update.

It's like

/remap jump gp1b1

for gamepad 1, button 1 (1-4 are front buttons, 5-8 are triggers/bumpers, 9-10 are Start/Select)


/remap left -gp1x
/remap right gp1x

for X axis (either analog or dpad)

Sorry for the mess - Spelunky SD is (I think) my 3rd most popular mod, but also the one that utterly failed to attract any support for my months of work (grand total of $11 in donations), so, to save time, the newer features are mostly mashed up from parts of other mods or personal projects, and these don't always work with each other, so they get swapped out for something else that still works whenever I need to update a big chunk of it.

You'll need a preview build of Haxe - some of the standard classes moved places and sfgml mostly references the up-to-date paths.

The dependency list can be found in this old post.

You can try restarting Steam on both ends or opening a port (any number, as Steam scans them) on one of the computers, but otherwise Steam is a big black box, and it's hard to guess why it could not establish a direct connection.

(1 edit)

The current resource view ("treeview") is very plain, being based on CSS-centric foldable section thing that I use for documentation (sample; how it used to look). So, as such, it does not support drag and drop in any state or form, and neither it does support renaming (or otherwise inline-editing) items.

There have now been two different people that said that they'd take a shot at integrating a more fitting component (like this one) and neither seemed to find time or otherwise get it to work.

The other part of the job would be to create and link up resource files correctly, but that is minor if someone gets the aforementioned features to work and submits a pull request.

You'll need a beta version of NTT from DIscord (linked in itch description)

Right-click on Extensions, pick Import Extension, pick GMLiveHelper.gmez, and then do the same for netlog.gmez. Both should show up under Extensions afterwards.

As per doc, you'd need to import GMLive-Helper extension which is added as an included file in the main extension.

GMEdit is primarily a code editor so it only supports a couple of DnD blocks, and comment block wasn't one of them. I added that one now, you can extract this preview version over an existing one.

Apparently this specific case is due to fact that IDE auto-completion file that I use to generate API scripts (fnames) has a duplicate entry for merge_colour that is in wrong format. Will be fixed in next version.

As per documentation, live_enabled is a macro that is set either in obj_gmlive (GMS2) or by you (GMS1). Based on that error, that is no longer the case.

You are supposed to launch NTT-Assemble and then press the digit key for option that you want (usually, 1)

(1 edit)

You can make a little AutoIt script to hit F5 in GMS2 when you hit F5 in GMEdit,

$bound = False
$suffix = " - GMEdit"
$suffixLen = StringLen($suffix)
while 1 ; bind/unbind the hotkey as we switch to/from GMEdit
    $title = WinGetTitle("[ACTIVE]")
    $newBound = (StringLen($title) > $suffixLen And StringRight($title, $suffixLen) == $suffix)
    If (Not $bound And $newBound) Then
        HotKeySet("{F5}", "OnRun")
    ElseIf ($bound And Not $newBound) Then
    $bound = $newBound
Func OnRun()
    $orig = WinGetHandle("[ACTIVE]")
    $title = WinGetTitle("[ACTIVE]")
    $titleLen = StringLen($title)
    ; check that it's still GMEdit just to be really sure:
    $newBound = ($titleLen > $suffixLen And StringRight($title, $suffixLen) == $suffix)
    If (Not $newBound) Then Exit
    ; get the project name from GMEdit window title:
    $project = StringLeft($title, $titleLen - $suffixLen)
    ; make a regular expression to find the matching GM:S/GMS2 editor:
    If (StringRight($project, 4) == ".yyp") Then
        $rx = StringLeft($project, StringLen($project) - 4)
        $rx = StringReplace($rx, ".", "\.")
        $rx = "^" & $rx & " - GameMaker Studio 2"
        $rx = StringReplace($project, ".", "\.")
        $rx = "^" & $rx & "\*?\b.+\(v[\d.]+\)\s*$" ; "[project name] ... (v1.4.xxxx)"
    ; and send a F5 key there:
    $def = "[REGEXPTITLE:" & $rx & "]"
    $hwnd = WinGetHandle($def)
    $out = ControlSend($hwnd, "", "", "{F5}")
    ConsoleWrite($hwnd & " " & WinGetTitle($hwnd) & " r" & $out & " e" & @error & @CRLF)

Splitter code can be ripped out of the "kitchen sink" demo, it's relatively small. As I have said, the primary issue would be in modifying the tabbed UI to support either multiple tab sets or dynamically switch active tabs as editors gain/loose focus. Not sure how this would be made to look remotely elegant.

If you have time to experiment with this, feel free to. The current head revision has editors abstracted away into editors.* package instead of Ace sessions being tied to tabs, which might help something.