This is a blog post about what I've been doing in 2020! There are many things.
Rivals of Aether
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.
Links: website · Steam page
Doodle Derby (previously called Fromto) also released on Nintendo Switch!
Links: website · Steam page
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.
Links: website · Steam page
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
Links: website · Steam page
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.
Links: Twitter · Steam page
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.
Update 2: The multiplayer update had now been cancelled entirely (breakdown).
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.
Pixel Font Generator
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.
Links: web version · blog post
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.
shader_replace_simple for GameMaker
Allows you to patch GameMaker shaders in real-time! Can be used together with GMLive for shader live-coding.
Desktop Screenshots for Unity
A Unity-friendly version of my GameMaker extension for grabbing arbitrary pixels from the screen!
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.
Games & mods
Bouncing Blade Blitz
A little 1P/2P game that I made for Disc Room Game Jam.
Links: itch.io page
Visual clarity tweaks for Nova Drift
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.
Links: itch.io page · Discord server
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.
Release all the things
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.
Make another videogame?
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.
Do a mailing list
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.
Last year's goals in review
- 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!
You do so many amazing things!
Is that universal multiplayer tool something you’d consider for devs to insert into their games?
The eventual plan is to license customized and/or embeddable versions of the tool to developers that cannot implement “official” netcode at the time but also want something more convenient than just linking players to the tool’s page.
Thanks for everything in 2020.
Hope you’ll be able to finish those tools from last year!
(Especially excited for cmnMenu and cmnChat, those have been a pain to build custom)
Brilliant as always, Mr. Yal :) Will we ever get to see your face?
Given that I don’t give talks at conferences or do anything else important, I suspect that I’ll be enjoying my (relative) privacy for a little longer.
Thank you for all the amazing work you’ve done this year. I’m looking forward to the things 2021 will bring.