Work
Antonball Deluxe released on 5th!
I wrote a lot of netcode but I can’t tell you much about it (yet).
I also wrote a blog post about netcode (more about it later)
GameMaker extensions
As usual, a bit of maintenance work.
I added GMS2/GMS2.3 versions to Window Freeze Fix!
Sometimes you face a problem and it turns out that you already made a solution for it before.I released a GMS2.3.1 version of my Screenshot Save Dialog extension!
This fixes a compilation error caused by breaking changes to buffer_get_surface.I released a GMS2.3.1 version of my live shader replacement extension!
The circumstances of why it only worked in the sample project are less clear, but turned out to be fixable by relocating macros into a script.I released a GMS2.3+ version of my Instance Flags extension!
This addresses `if (a) ++b` no longer being allowed, and repackages the extension into a single script you can copy-paste.I added a few things to GMRoomPack!
The rooms you export from the helper tool can now be compressed to save space, and there is an option to reuse existing tilemaps instead of creating new ones.
Promise.gml
I released an extension that adds JS-style Promises to GameMaker Studio 2.3!
If you've worked with Promises in JavaScript, TypeScript, or other programming languages, this is the equivalent and can be extremely useful for chaining async operations - for example, if you wanted to make an HTTP request and then another if it succeeds, and to log if either of them fail, you could just
Similar to the JS counterpart, the library also features utility functions for working with groups of promises.
Steamworks.gml
My Steamworks wrapper extension has always been in an interesting spot:
It has by far the most complicated build process out of all of my desktop extensions - GMS1 uses Steamworks 1.35a, GMS2 uses Steamworks 1.42, and Steamworks SDK works on Windows/Mac/Linux, so I have to compile 6 binaries total whenever I update it.
With primary additions being networking and matchmaking functions, the extension is used predominantly for commercial games.
At the same time, people aren’t eager to support the development (either financially or by contributing code) unless specifically told that I’ll add the thing they’d like if they pay me.
A few things happened over the past few weeks:
I finally wrapped up automated builds on GitHub!
This means that I don’t have to boot up a Linux VM or a Mac every time I add something to the extension.
Also you can see how many attempts it took to get a Mac build working in the “workflows” log.
It is worth mentioning that this wouldn’t be possible without Anton (Terisback)’s help as I was struggling to find time to get to this for a very long time.Consequently, I uploaded new binary builds with extensions to itch.io!
I added a few new functions!
Have you ever seen the game reposition Steam notifications so that they don’t cover important game UI? Me neither, but you can now:
GMEdit
I released a new GMEdit update!
It brings a handful of improvements to type system, and adds an online version of the program!
As GMEdit is an Electron-based application (read: it runs inside a slightly extended Chromium browser), and I have already done most of the work for GMLive.js, this was substantially less impossible than it otherwise would have been - I only had to fix up a few things like synchronous loading and introduced fallbacks for native menus.
The result is amusing - you can now view/edit GameMaker projects without installing anything at all. You can even open it on a mobile device!
Blog
I published a blog post about deterministic netcode!
It goes over concepts of lockstep, rollback, and preparing your game for future netcode integration.I published a small post about fixing buffer_*_surface errors in GMS2.3.1+!
On a closing note, I leave you with this illustration from the above post about netcode