🤑 Indie game store🙌 Free games😂 Fun games😨 Horror games
👷 Game development🎨 Assets📚 Comics
🎉 Sales🎁 Bundles


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

Creator of

Recent community posts

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.

(Edited 1 time)

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)

(Edited 1 time)

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.

Same-document split view or having different documents in each view?

Cause the later would require rewriting how tabs are handled (currently it's single-editor because that cost much less in development time)

[for anyone being confused coming to this post much later on, this is a reference to that one comment]

I've completely missed this and you probably found this out by now, but if anyone else is wondering, making a mod loading file named "startup.txt" in mods directory will auto-load it upon boot.

This was later resolved over Discord - installing Wine-Mono fixed the issue.

Uploaded a new version that fixes this - otherwise can add

default: return -1;

after the //comments in the switch-block in skin_sprite.

The packet being sent successfully is not an indication of it being received, as it returns instantly. Rather it indicates that you have the ID right and can send as such.

The best source for expected behaviour would be the official documentation. I think as of writing my doc, that version was not yet live, so my doc notes are based on whatever was mentioned in the source code for the example/headers.

"Reliable" packet types should be resent automatically and delivered in order they are sent in.

You should send a "ping" packet now and then and detect timeout if the player doesn't respond for X seconds.

1. I thought I had fixed that one, will take a look.
2. This is as per doc, GMLive uses `with (inst) variable_instance_...` kind of code to mimic built-in behaviour and work at remotely acceptable speeds, although I guess having a slower solution as fallback is better than having an error...
3. Wasn't aware that you could write `return;` instead of `exit` - apparently a GMS2 change, but I can't find any release notes on this. I'll fix that.

(Edited 1 time)

Steam networking is state-less so you can continuously send a packet until the player confirms that they have received it.

Also see if you are calling update function at least every few frames and how are you detecting the timeouts (as, again, Steam API itself has no concept of a timeout).

Current mode, although "beta" branch should still work. You can also try renaming the game directory to let Steam redownload it and then reinstalling NTT.

If you have a file called data.win in game directory and nuclearthrone.exe is larger than it, you can try removing data.win and running NTT-Assemble again.

(Edited 1 time)

1. I'm not actually sure what's going on here - those keyboard shortcuts are handled by the code editor component (Ace) and I'm not seeing any reported issues about them not working on Mac. Someone else is also getting this so it's not just you at least. Maybe I'll be able to ask about this after I get an easier-to-test web version of editor going.

2. That'll be in the next update. Won't be smart completion like what Parakeet did (that's a lot of work) but will be on par with GMS2.

Hello! It would appear like I forgot to change documentation URL when making GMS2 language template. You can fix this by opening resources/app/api/v2/config.json and changing "docs.yoyogames.com" to "docs2.yoyogames.com" (like so)

There's a chat command called "/remap". Writing it as-is shows names of inputs. Doing "/remap <name>" shows what the current mapping is. Doing like "/remap attack S" changes mapping. Supports some basic expression operators (e.g. "S|D" to accept either of two, or "gp1x<-0.5" for custom deadzones on gamepad).

You set the port yourself (with Hamachi, default should work) and then the person connecting would specify the same port (so tell them which one you picked).

So you set the port on "Host" screen, pick Start (and get a player list screen), then the person joins (and shows up on player list), and then you pick Start to get into the actual game.

Hello! IP address to use is shown in Hamachi itself. IIRC you can also right-click on the user in network and pick "copy IP". So one player would host the game while being on the network and the rest would use that as IP/Address to connect to them.

Not at this time - adding such an option entails redesigning how mutations and related user interface (mutation picker screen and mutation lists) are handled on basic level. There might be mods that do this to some extent already - I'd suggest to ask around.

As per documentation, if your script uses argument0 and argument1, you pass them to live_call (otherwise live-reloaded code would show an error due to not knowing their values); live_call_ext is used for scripts that take a varying number of arguments.

live_defcall/live_defcall_ext are used if you need the system to return a specific value if your updated code has compilation/runtime issues - e.g. if you are making changes to a script that returns a string, you might want it to still return some blank/"error" string even if you temporarily mess up something (to avoid non-"live" code throwing an error and closing the game).

Might need to remove the NDLLs from the server's directory / included files.

I uploaded another version now.

Basically, what's happening is that when someone finds a bug that break's GMLive's compiler, or when I'm experimenting with something that involves changing how compilation is handled, I enable a flag that adds that line (showing the script chain that executed before yielding a compilation error) and one other. Then I sometimes forget to disable it before uploading and you get this. I have now stripped it out for good because I think this is the third time this happened.

All native targets are going to work more or less the same (because they share the source code internally);

HTML5 is a little different because of a few bugs (e.g. arr[1,0] works like arr[1][0] instead of storing extra rows in the same array object) but if you are marking "constructible" classes as @:nativeGen (thus not using the second row for metadata), it'll be largely unaffected.

For several of my extensions I've been using a scheme where native targets are covered by a GML file, and JS targets are covered by building the same project to JS (and updating the extension file definitions as a post-build step). Since GML is compiled to JS too, it can use Haxe-JS values without any issues.

(Edited 1 time)

Compiling less strictly typed code (such as GML) to more strictly typed code (such as C++ or C#) is a lot of trouble if you aren't content with just having everything stored as bulky and slow-ish "anything type". I don't think the amount of work would be justified.

Should check if Arcadia was a compiler or an interpreter