Work
It has been a slow quarter (well, now almost two quarters) due to a number of projects moving to semi-current GameMaker versions (generally GM LTS), which in turn sometimes creates some amount of work for me.
For example, to simulate Steamworks-like networking (where you dequeue datagrams in a loop instead of waiting for sync events) without running an extra copy of Steam via Sandboxie (a very fragile ordeal), I previously used FaucetNetworking, an extension from GM’s earlier days. However, as GM have finally moved away from 32-bit executable files, this no longer works, so I had to write a tiny replacement DLL.
I am also currently rewriting some parts of the code base that I drag back and forth between the work projects with deterministic netcode, though the full story about this will have to wait until the next newsletter as I’m apparently already short on characters.
GameMaker
I did a bunch of work on a bunch of things in the past months.
Perhaps most importantly, I have released a GMLive update that fixes a number of small quirks and makes the extension recognize new syntactic additions to GML (like Script.staticVar
or $"x: {x}"
). It can now also auto-update 9-slice sprites in-game when you change them in the GameMaker IDE.
I have also updated GMEdit, similarly adding support for new GML features, but also a few more things: like multi-layer tabs, for instance:
Usually you have one sequence of tabs (like in GameMaker) or two (like in Visual Studio with “pinned tabs”), but what if you need more? It’s not outlandish to have a dozen or two tabs open when refactoring something, and things can get messy quickly. So I added an option that lets you have tab “groups”, each of which can be shown on a new line. It’s nice.
I made an extension that lets you use custom window shapes! You can do some cool tricks with it.
I made an extension (and a post) that fixes the buffer_set_surface function in GameMaker: Studio (this issue doesn’t exist in GMS2) not working on some computers and wrote a post about it. This builds upon my existing research and opens up some possibilities - like the GIF loader extension that I have now updated to work with old versions, and perhaps Desktop Screenshots at a later time.
Last year GameMaker introduced a new API (YYRunnerInterface) for native extensions on desktop platforms that makes it easier to do a handful of things, which led me to start a rewrite of my Lua wrapper extension. Ultimately I somewhat ran out of steam (some Lua C API features give me a headache), but you can find the work so far on GitHub.
I wrote a post about practicality and workarounds in making games with old GameMaker versions. It also contains this little illustration:
I made the aforementioned tiny UDP DLL. It doesn’t do much, but it doesn’t have to either. Also the DLL’s 6KB, which is amusing.
I updated my DLL for native cursors to fix a few odd bugs.
I updated my DLLs for getting monitor information and taking input from multiple mice/keyboards with x64 support.
I also updated someone else’s DLL for COM-port communication with x64 support and more functions.
Other development things
I’ve put up an example of using constructive solid geometry with baked lightmaps in Godot.
I’ve uploaded a handful of my userscripts and userstyles to GitHub. These include my various tweaks to make websites nicer to use, but also:
I released a new version of my character editor for Terraria. This one’s easier to use on both big screens and little screens.
I wrote a Twitter thread (unrolled) about True Valhalla / Matthew Bowden and Kingfall game. It’s about how to go from being a local role model to hiding from responsibilities.
Life and all
Every other day, unless there’s an air raid alert, I go for a walk. My walks typically span 5..10km and I stop by for a lunch somewhere on the way.
It has recently occurred to me that these 20-30 minutes of waiting for an order are typically spent doing nothing in particular - maybe you can hear the sea or there are birds hopping around the tables and picking up the scraps after the visitors, but that’s it, really.
So I thought - if I had one of these silly little folding keyboards, I could throw it in my bag and draft a portion of a post (like this one!) while I wait.
As it goes with these things, some of the more interesting options turned out to be out of stock in local shops, but I did find this one:
The build quality and feel are roughly that of a cheap laptop keyboard, but the layout is actually alright - for desktop use my favorite layout is 75% (with full-sized arrow keys and navigation keys), but if I’m only really doing text entry, this is okay too.
The other topic of hardware updates is trackballs. I use a mouse as my primary pointing device, but I also had a Kensington Orbit trackball for a few years now thanks to meseta.
While the ball in this model isn’t as big as I’d like (almost big enough to rest 3 fingers on it, but not quite), it has a “scroll ring” - a ring around the ball that you can spin around with your finger. This movement is amusing and near-frictionless. It’s shockingly nice.
Since then, I’ve been eyeballing the bigger Expert model and finally bit the bullet after randomly stumbling upon it in one of the local electronics shops.
I have a few things to remark:
A billiard-sized ball feels nice to roll around.
The scroll ring in this model uses a different mechanism and isn’t nearly as frictionless as on Orbit.
However, it has 2 more buttons, and you can map a button (or a pair of) to toggle “scroll mode”, which translates ball motions into scrolling. This also feels nice.
And finally: it doesn’t fit into my keyboard tray! This is not a thing that I have actively considered, but between the tabletop having bevels and the trackball having tiny rubber legs to better grip the surface, it comes a few millimeters short and prevents the tray from being able to fully roll in. So the trackball is currently sitting on the table, almost permanently in the “scroll mode”, and I roll the ball with my left hand while looking around long pages or articles.
A label on a little bottle of iodine solution in my bathroom cabinet indicates that it was made in Bakhmut in 2021.
Judging by occasional satellite photos, not too much remains of the surrounding area. Not too much remains of Bakhmut in general as the capture of the medium-sized city became a top priority for the Russian Army. With Russian officials announcing some sort of a capture at least on 3 occasions and fighting still ongoing (and now Ukraine’s forces taking back control over some areas) the strategic purpose of the ordeal has long escaped any kind of logic.
Kakhovka dam was destroyed on June 6 - one of the largest cataclysms for Ukraine in recent years, especially for wildlife.
The evidence overwhelmingly suggests that it was either blown up by Russia (1, 2) or burst due to prolonged neglect and water levels remaining at a 8-year high for the entirety of May.
Russia does what Russia always does - blames Ukraine and spreads conflicting theories in attempt to muddy the information field and shift the blame away.
Here in Odesa, debris continue to wash up on the shore. Here are some pictures from the today’s walk:
A door. A window. A piece of a sofa. A fridge. A chunk of insulation. A wall made of some porous material. These are pieces of people’s lives.
Clumps of reed (?) float in the sea, holding onto seemingly nothing at all. Occasionally people find a scared animal clinging into these - a handful of muskrats, some frogs, a baby otter, and even a deer were rescued in the past few days.
It will take many years for the Kherson ecosystem to recover.
Thanks for reading!
You wrote that Russia is to blame for the explosion, or it happened by itself. But in the articles you sent there is not a single piece of evidence of Russia's guilt
On the other hand, this is absolutely unprofitable for Russia, since the water flooded most of the territory under its control.