In which everything is happening at once

Netcode, more netcode, Nuclear Throne, console porting, and more

Work

The past two months have possibly been the busiest in a while:

Nuclear Throne

I worked on Nuclear Throne a bunch this summer! Migrated the game to GMS2.3, reworked the menus (including the infamously vague “delete [save] data” button), and added a handful of new settings, even spotting a 60fps mode!

Also this happened along the way:

You can check out the public beta yourself on the “openbeta” branch on Steam.

Rivals of Aether

Rivals of Aether is moving ever-closer to a public rollback netcode beta!

The recent bugs are increasingly leaning towards “mystery” category - e.g. in some cases instances gain variables that are never assigned to them.

Nidhogg

I helped update Nidhogg 1 and Nidhogg 2 to GMS2.3!

On my part, this involved updating Steamworks integration to the current version, syncing some improvements to shared parts of netcode, and helping troubleshoot a few issues.

Samurai Gunn 2

Samurai Gunn 2 entered Early Access in late July!

There are still bugs to fix, but players seem to be enjoying themselves, and I have played my share of matches with friends too.

Console porting

I ported a game to Xbox! Can’t say which game yet, but it should hopefully be properly announced soon.

The devkit (“project scorpio devkit”) is neat - not too unlike a retail console, but with a handful of front macro buttons, extra USB ports (in a convenient location, no less), and a little LCD display (which is cute, but has little use given that you can very well look at the TV screen).

What was less neat is that Microsoft Partners website (which is where you upload your builds and configure various things) sometimes just gets stuck in a login loop - you try to navigate somewhere that requires access confirmation, the website redirects you to Microsoft login page, you enter your credentials, and… get redirected right back at the login page. Fun times.

As for the process itself, everything went better than I expected - integrating achievements has been straightforward and the game’s save files were not complex enough to cause any issues with moving to async saving/loading (which is required to support cloud saving).

A thing that I’ve not thought about before is that Xbox titles have to handle a scenario where the user backs out of the game at some point (such as via Home button), but when the game is resumed, a different user is now logged in - and you don’t want to overwrite someone’s save file with that of a different person (nor save if they’re not logged in). A game might kindly inquire whether the original user is going to be back before abandoning a level, but plenty of bigger games simply kick you out to the menu - no confirmation.

Things that break

I have peculiar luck with software:

Windows

After updating Windows to version 21H1, a peculiar thing started happening: sometimes, the login screen would softlock when resuming the PC from sleep:

When it did, the cursor would still move around as normal (which is a good way to tell whether the system is completely dead or not), but you couldn’t do anything since the entire screen is one component that’s not responding. Event log did not indicate that anything happened.

Surely enough, this was proving a mild inconvenience given that I often have a few dozen windows spread across the three screens and re-opening everything back up takes time.

Searching for possible causes online has been unfruitful - you see the same “check your disk, check your temps, reset Windows”, and that’s fun, but you can’t just reset Windows every time an update breaks something.

Still, I figured that I might as well run a disk check on Saturday morning while cleaning things around the apartment.

The system reboots, the disk check runs a little while (showing no detected errors during the process), a message reads “rebooting to show the results”, the system reboots, and… the Windows doesn’t boot - stuck on the “spinner” animation.

“Well that’s inconvenient” would be a milder-worded version of what’s been on my mind as I rebooted the computer for 3rd time in a row to see if anything changes.

Recovery mode has proven unfruitful - somehow a restore point was not made during an update, and trying to reset Windows had the “installer” get stuck as well.

As I booted up my Mac to make a boot drive with a Linux distro, Windows suddenly came to its senses and switched to “Undoing changes”, booting up as if nothing happened afterwards.

Ultimately it is unclear what the heck this was all about.

Logitech Options

A few days later I would learn that Windows did, in fact, try to do at least something during a reset attempt - Logitech Options (software for mapping buttons on the Logitech office-oriented mice and keyboards) wouldn’t open up anymore, meaning that I couldn’t adjust application-specific settings - the very thing I use their mouse for.

A search reveals that this can be caused by just about anything (does the tool do exception handling? at all?), but the first recommendation that support gives you on forum threads is to reinstall the tool. This seems like a sound idea, so I do that.

A reinstall did not fix the issue. It did, however, wipe my settings without asking, turning the ~$100 mouse into a ̶p̶u̶m̶p̶k̶i̶n̶ an equivalent of a much cheaper device.

Some poking around revealed that everything works except for the UI application - perhaps I could even edit my settings by hand - that is, if uninstaller didn’t remove those.

Inspecting the UI app’s executable revealed that it’s a .NET executable, which is great news as it means that it’s both easier to decompile AND produces readable stacktraces in Event Viewer. Well, mostly readable:

A thing about .NET exceptions is that the exception text often and unkindly omits important details - such as the file name for FileNotFoundException.

I boot up dnSpy and run the UI app with debugger attached. The missing file turns out to be Chromium Embedded Framework’s DLL, which isn’t actually missing - you just get this exception if the DLL’s dependencies fail to load (again, thanks .NET).

A search reveals that CEF commonly fails to load if VC Redist is broken in one or other way, and so it is - reinstalling (from official page) fixed the issue.

I decide to report the issue and am met with yet another example of why each interaction with Logitech Support makes me slightly less likely to buy another product from them:

Tethering

Once a month or so one or other thing happens and I don’t have wired internet access for a little bit - perhaps the strange 28-day billing cycle finally catches up with me, or some wires get torn up, but, rest assured, there’s no internet for a few hours.

In times like these I usually read my emails by opening a “personal hotspot” on my phone and connecting to it with this unconvincing-looking dongle:

Last time, however, things were different - perhaps the previous Windows adventures deleted a system driver, or the little dongle has finally decided that it’s had enough, but, rest assured, it ceased to work - either detecting as a mystery device or ceasing to function shortly after connected.

When you look for how to tether from iOS device over USB, everyone make it sound easy-peasy - oh, just connect the device, pick its network, and you’re good to go!

That, however, is a lie: unless you have a driver, you can’t do anything at all with iOS devices. And to get the driver, you need to install iTunes. And to get iTunes, you need internet…

… all in all, I ended up connecting an Android phone to the iPhone’s WiFi and tethering internet access from it to PC to install iTunes. Wired internet resumed working some 20 minutes after.

GameMaker things

  • I updated my system-wide screenshot extension to GMS2.3!

  • I released a GMLive update that fixes a handful of HTML5 issues!
    This was to match the Opera GX jam that was going at the time, causing more people to try GMLive with HTML5.
    I then released another, smaller update to fix a few more issues and add quality-of-life features.

  • I released a 2.3 version of my GOG wrapper!
    For reasons that will perhaps remain a mystery, GMS2 IDE was very much allergic to trying to auto-import the extension - despite it otherwise working perfectly fine in 2.2.5

GMEdit

I released two (1, 2) GMEdit updates over course of July/August! These introduce a whole lot of options for tabs (adjustable size, multiline tabs, pinned tabs, auto-sizing tabs) and further expand the linter/type checking, allowing for even more code to be type-checked and with less effort on your part.

Misc.

Terranion

I released an offline version of my Terraria companion/mini-wiki app! And made the online version work much faster.

Twitter curiosities

Some crafty fellas (this is a polite way of putting it) tried to use a trailer of a game I worked on (Knight Club+) for a crypto-scam!

In fact, they even ran the whole thing from a (stolen? sold?) verified Twitter account, which is an expensive way of doing it.

Twitter eventually stripped the checkmark from the account, but did not suspend it, which curious given that this is all that the account seems to be used for these days.

The tweet was archived here (unfortunately, before dozens of bot replies).

GameMaker changes

Ever since GameMaker licensing changes were announced, people have been asking me for my takes on the matter, which I’ll also put here for future reference.

Here’s the gist:

  • Trial version is no longer time-limited - you can mess around for as long as you want before paying anything.

  • Furthermore, trial version users will later be able to share their games through Opera GX browser.
    (likely through a game portal not too unlike itch.io or Newgrounds)

  • Licenses were grouped into two subscription tiers - Indie (desktop, HTML5, mobile, UWP) and Enterprise (all the platforms, including consoles - previously called an “Ultimate” license).

  • Subscriptions are monthly or yearly, with no minimum commitment (so if you need an export for a one-off thing, you can subscribe for a single month and be done with it).

  • Existing permanent licenses remain permanent.

  • Furthermore, based on the licenses owned, you can get a number of months of either subscriptions for free - without surrendering your permanent license.

  • For the time being, you can still buy a GM license on Steam and it’ll remain permanent.

The good:

  • This is quite a treat for professional users as the console tier is now almost twice as cheap ($1500/y➜$800/y), and if you only do 1-2 console ports per year, you can very well get a console license for 1-2 months, which is even cheaper.

  • New version users no longer have to pay anything until their game is ready to show to the world, which is great for people learning at their own pace.

The bad:

  • People that were intending to buy a single permanent license eventually now have to decide between whether to get one right now (while they still can) or deal with the subscription-based system.

Overall, not nearly as bad as some try to make, though if you want to take this as an opportunity to play around with other engines, you should! The “Stop Waiting for Godot” jam is about to start, for example.

Personal life

As far as my own things go, this has been a rather uneventful summer - my average walk distance had grown to over 6km (with peaks of over 12km), but most often I’m not going anywhere in particular.

It’d be nice to tell everyone to leave me alone and go on a vacation for a week or two, though I’m not sure when that’s going to be given the ongoing pandemic situation.


And that’s seemingly all! See you later