This is a blog post about what I've been doing in 2020! There are many things.
A little logo of mine on the updated RoA splash screen
Rivals of Aether released on Nintendo Switch this year!
Consequently this meant plenty of work tweaking netcode to work on Switch.
And getting a devkit, which took a while due to customs.
Switch had proven to be a very interesting challenge as many things work very differently to desktop and the little console's wireless module had proven to be a trouble as we couldn't possibly foresee just how choppy connections can get on it.
Although we have refined this in subsequent updates, there is still a lot more to do, and rollback will most likely be the only way to have Switch netcode unconditionally work for all players.
Doodle Derby (previously called Fromto) also released on Nintendo Switch!
Check out the full trailer!
While Duel Arms will be out when the time comes, an updated version of original Knight Club has been released on Steam this year! It features updated graphics, stages, and, of course, Steam-based online multiplayer with matchmaking.
Frankly this should have been in the last year's post as well!
For projects with deterministic netcode, there is an eventual point where everything works well, the team is aware of how to structure the game code to avoid issues, and thus I don't have to do anything most of the time. An all-around pleasant time.
The game has had a handful of updates
Antonball is an intense mix of platformer and ball-breaking action!
I'm doing netcode for the various cooperative and versus modes in the game.
The game is set to release in 2021, but you can follow the development progress.
Online multiplayer and modding were one of the game's most demanded features.
Following last year's work, Forager modding update released in early 2020 the multiplayer update is to release sometime in 2021, and, if the stars align, I might actually finally be credited in the multiplayer update... instead of, you know, sitting under Special Thanks despite my code (modding API and networking core systems) making up for 1/6 of the total line count in the project.
The whole chain of events was weird enough that it could have been a separate blog post, but, in short: there was no formal contract (only an NDA), it took almost 3 months from an invoice to the final payment, and I found my version control and Discord permissions abruptly revoked amid that, which, combined with unfortunate or vile timing of ceasing to respond to my messages for the next 5 days, did cost me a few nights sleep as I was no longer sure if I would be fully paid at all.
I couldn't say that I understand the logic behind any of this, but can only speculate that me asking for a written contract (such pleas were left unanswered) or to be paid via wire transfer rather than a payment method convenient to studio (which turned out to require me to pay 17.5% extra tax) had proven to be less convenient than the workflow with other team members.
Upon re-inquiring about my status on the project I was eventually told that I'll be informed if the need for my services arises again.
Though I did get paid in the end, including compensation for the tax rate difference, at this point I'm more than happy to not have to touch this project ever again.
If anything, this serves a polite reminder to never start any work before a contract is signed - no matter how good the game seems or how many awards it won. No hard feelings.
Update: Since writing this blog post, several current and past team members reached
out to me with different but similarly unusual stories about their own experiences.
In a way it is comforting to know that it wasn't some sort of personal vendetta against me, but also raises questions about the practices with game's development despite its commercial success.
As it goes, there are always a few more projects that are in initial phases.
Most are unannounced, but also here's a hint.
I worked on many tools this year!
I added a whole lot of things to GMEdit this year!
- Rainbow bracket support (example plugin)
- Template strings
(allow to do `val: $a/$b` instead of "val: " + string(a) + "/" + string(b))
- Advanced "find references"
(shows context kind next to each reference)
- Smart auto-completion features (and JSDoc)
- Keyboard shortcut editor
- pre-GMS support (kind of)
- null-conditional operators
(which can save you a lot of typing in operations with validity checks)
- Region Backgrounds
Lets you see what part of the code you're in.
- Peek Aside
Quickly open a script for editing in a side panel.
- Quick, make script!
A keyboard shortcut for creating new script resources while editing code.
- Raw directories
Adds a file system viewer into the resource tree.
I made a web-based tool that allows you to make real TTF fonts out of pixel font "tilesets"!
I later added localization support and people translated it into a number of languages.
The converter that I've shown last year has been released in March!
With a mechanism for automated asset importing and a code rewriting rule mechanism, it can be extended or tweaked on per-project basis without requiring intricate knowledge of writing GameMaker resource parsers in Haxe.
Migration tool for Quality structures
Automates rewriting ds_ functions to their qs_ counterparts, along with accessors.
GML syntax highlighting... in GML! But also in JS or Haxe.
By this time I've lost count of how many times I wrote a GML parser for one or other purpose.
HDPI+ support for GameMaker HTML5
By default, GameMaker games will use the resolution that the web browser reports, which is not necessarily correct. This extension helps with that.
Allows to "reunite" detached resources with their GameMaker Studio 2 project file, allowing to reconstruct otherwise corrupted projects.
gamepad_force_focus for GameMaker
Allows to take input from XInput gamepads even when your game is not in focus.
window_set_icon for GameMaker/Unity/C#
A multi-tool (GameMaker, C#, Unity) extension for manipulating window icon, taskbar icon, and taskbar badge on Windows.
execute_shell_simple for GameMaker
Allows to start up external applications! Particularly handy for getting around a recent Chromium change that causes url_open to open %22http//<link> in GMS versions prior to 2.3.1.
sprite_add_gif for GameMaker
Allows you to load animated GIFs in your games!
A big highlight of this year is the GameMaker Studio 2.3 update!
I wrote a blog post about just how many new things you can do with the language now.
Consequently, this also meant that I suddenly had decades of extensions to update to support new features or fix compatibility issues.
Then 2.3.1 released, adding a Windows x64 runtime, which meant that I now had even more extensions to update (to include Windows 64-bit versions).
Overall, an indefinite amount of time this year was spent just on updating extensions and tools that make them.
A little 1P/2P game that I made for Disc Room Game Jam.
Links: itch.io page
I made a multi-version mod for Nova Drift!
It helps with not losing your ship in the game's chaos by introducing options for a variety of "crosshairs" (highlighting the ship position and orientation), background tinting, and a few other.
Links: itch.io page
I have soft-launched my universal online multiplayer tool!
While I'm still fixing some of the more exotic issues, it already works for hundreds of GM games, and the Steam-based version spares you of having to port-forward.
Due to the global pandemic situation, this was a pretty strange year.
Given that I work remotely and my passtimes involve playing videogames and taking walks through variously desolate spaces, I wouldn't say that I have been particularly affected, save for hangouts being done largely online.
Sometimes the desolate places are in a less than usual state
as I walk by them.
You can suspect that the weather is going to be unusual if there are no seagulls hanging out on the beaches.
Given the workloads of this year, a handful of unreleased tools from the last year remained unreleased, so I should hopefully get those out soon.
Wouldn't that be nice.
Especially now that I have an excuse for doing multiplayer games without having to worry about doing netcode for them.
Well, I guess I already did:
but what I do want to do with this is to keep the mailing list updated through the year - a recent issue had been that people often don't even realize that I made a solution for their exact problem a few weeks prior (despite following me on social media), so I hope that an organized updated feed will help with that.
And, of course, there's plenty of work to do.
- Take it easy[-er]
That's a definitive "maybe" - although I've not took up too many work projects, GameMaker changes left me slightly overwhelmed for the second half of the year.
- Draw more
I published a mini-FAQ post and started occasionally posting doodles, although there's still a lot to do and a backlog to sort through.
- Make a videogame?
I did make one (1) videogame this year (as per above), which is a +∞% increase over 0 videogames last year.
There's a lot to look forward!
Thanks for reading!