Email VK Tumblr Vadim „YellowAfterlife” Dyachenko

About What's here and why.

Hello!

I'm Vadim (also known as YellowAfterlife), and this is my portfolio page of sorts.

You can click on project sections to expand information about them.

Sections marked as [ · · · ] are work-in-progress.
My role for each project is written on bottom-right of each section's header.

For smaller projects, you can also look around my blog and itch.io page.

For a brief on who I am as a person, see the About page on the blog.

You can also find me on Twitter, Tumblr, or VK if you'd like - I periodically post about what I'm working on.

Projects

Fromto A multiplayer platformer 'racing' game
network programming 2018-

Fromto is a platformer sandbox 'racing' game with track-building elements - up to 4 players race an unfinished track in turn.

When everyone fails all players must 'work together' to modify the track before they try again. Players can place ramps, traps, springs, and a variety of other parts/hazards to make it possible to complete the track and/or prevent other players from completing the track.

I was commissioned to build the game's online multiplayer system alongside with a few other purpose-specific components (like Steam leaderboards and GIF sharing).

sfGML A Haxe➟GameMaker compiler
development 2018-

sfGML[1] is a custom Haxe compiler module that lets you write code for GameMaker projects in Haxe. That is, you can write high-level code in Haxe (utilising classes, interfaces, or many other features of the programming language) and have it compiled to equivalent GML code.

From the start of it's development in 2015, the primary goal of the compiler was to make it feasible to write complex code for GameMaker games - for example, you could write thousands of lines of netcode in plain GML, but lack of compile-time checks would cost you some sanity.

Over time the compiler was expanded to support a large quantity of Haxe and GML specific features, and is widely used in my other works - from my INI / JSON / ZIP extensions to netcode tools (at this time, in most projects) to far more ambitious projects such as GMLive.

The compiler is free and open-source.

  1. "sf" stands for "super-flat" - an approach where field paths are completely flattened, com.pkg.Class.func -> com_pkg_Class_func. Commonly used in JavaScript to make it easier for optimizers to analyse code, this is also handy in GML to eliminate lookup overhead.

GameMaker Studio 2 Fixes for HTML5 target
additional programming 2018

Fixes for HTML5 target in GMS2

Early 2018 I was commissioned to work on series of small fixes for GameMaker's HTML5 target.

Since I had limited knowledge of GameMaker's internal workings, but had a plenty of experience with GameMaker (as software) and JavaScript, my work largely consisted of fixing "support" functions (ones affecting strings, files, or data structures).

I've also done initial implementations for several new functions that would be making an appearance at a later time.

All in all this was an interesting project and it was nice to have slightly more direct impact on software that I often work with.

Affected issues can be browsed on bugtracker:

GMEdit A high-end code editor for GameMaker
development 2017-

Sometime in December 2017 I decided to adapt my existing work on GML highlighting and auto-completion (from GMLive.js) into an Electron-based application, thus creating a standalone code editor.

The primary goal was to make an editor that would allow quick navigation and code editing - GameMaker object events and timeline moments are shown in combined view (as they would in programming languages with classes), the editor uses a modern style layout, and keyboard shortcuts allow to open/close/switch tabs and places in instant.

Later on I added a variety of syntax extensions to GMEdit, which allow to reduce time spent writing boilerplate code (argument naming, JSDoc), make code faster to read/write (doing buf.resize(64) instead of buffer_resize(buf, 64)), and even introduce new language features (array structures, coroutines, inline functions).

GMEdit is free and open-source.

Caveblazers A roguelite action platformer
network programming 2017-

Official online multiplayer mod for Caveblazers

Local coop mode had been introduced to Caveblazers in November 2017, and, having previously played the game for a number of hours, I was curious about whether it could be made to be playable online.

Initial tests were done late 2017 while the actual implementation was in on-and-off development since March 2018.

The work takes place in form of a mod that is available to all game owners for free.

GMLive.gml A live-coding extension for GameMaker
development 2017

Slightly less than a year after the release of original web-based version of GMLive and work on modding system for Nuclear Throne Together, I've had an even wilder idea - as I already handle almost entirety of GML syntax, why stop there? If I could make a complete GML compiler+interpreter work inside of GM, I could have the game load up and execute code as it's changed, and that would be so much faster for prototyping new code in large projects.

Of course, as it usually turns out, it was still a crazy amount of work, but the result was truly impressive - you import an extension, add a single line of code to your code of interest, start up a helper app together with the game, and that's it - you can now edit the code and see it update in-game the instant you hit "save".

With 1-minute setup time and unparalleled functionality, the extension is generally regarded as something that should have been part of GameMaker itself.

Nuclear Throne A roguelike top-down shooter.
additional programming 2017

Nuclear Throne's update 99

After working on Nuclear Throne Together for a year, I have been approached to help with development of base game, as the game's main code base had been long feature-locked due to PSN development, while NTT continued receiving fixes and improvements without needing to worry on PSN compatibility.

Therefore a suggestion was made to base the PC update on a variation of NTT source code instead, ditching online multiplayer functionality (which takes a toll on performance due to technical specifics), but maintaining bug fixes and numerous "quality of life" improvements.

A small explanation can be found in this interview with Rami Ismail of Vlambeer.

The update was released in November 2017. A smaller sub-update with fixes for discovered and forgotten issues is in the works.
Technical details can be found in blog post by me.

Voidigo A roguelite ability shooter
network programming 2017-

I'm helping with netcode and minor additional programming for a game called Voidigo, being made by people behind the ThunderHumor YouTube channel.

Voidigo is a roguelike shooter with emphasis on exploration and atmosphere.

As of writing this section, the game's still mid-development and no release dates were announced. You can follow the game's development on Twitch (streamed live) or YouTube (archived streams); there's a Discord server for livestream chat and any other questions.

Knight Club A multiplayer platformer fighting game.
network programming 2017-

A 2-4 player action platform-fighting game that brings traditional fighting game elements into an unlocked, free form movement playstyle.

As I have been previously working with developers on Kerfuffle, my involvement started very early on, and I've been handling most of networking for the game.

The game spots conventional connect-by-IP networking for freeware and DRM-free releases, and uses platform-specific P2P networking and matchmaking for "Deluxe" version.

Rivals of Aether An indie fighting game.
additional network programming 2017-

I was originally commissioned to aid with migrating the game's netcode from lockstep to rollback to mitigate latency in online play (small announcement).

Over time the scope had grown slightly and my role on the project expanded to cover general upgrades to netcode (the original could only work for 2 players and only on Windows/XBox) and additional systems for making it easier to create custom content for the game.

Nidhogg 2 A sequel to award-winning fencing game.
network programming 2016-

After helping on Nidhogg, I was commissioned to do netcode for the game's sequel.

Starting on network programming early into game's development was a good decision - it allowed to avoid vast majority of the issues encountered with the first game, and also to set up the game in a way that would make implementation of new features easier.

I have implemented networking and matchmaking for the PC version, and laid out the foundation for the implementation in console versions, providing technical support and consulting during development of ports.

Further improvements are being worked on every now and then.

GMLive.js Runs GML code in-browser
development 2016-

After working with GameMaker, parsers, compilers, and web-based tools for years, I have grown increasingly curious as to just how hard it is to compile GML to JavaScript.

As it turned out, pretty hard - while GML does look akin to JS, it spots substantial differences both in what is considered valid syntax and in actual workings. As a bonus, the official implementation is a big black box, meaning that any assumptions about inner workings would have to be either based on examining output code or be pure guesswork as such.

Having written numerous syntax parsers in past, I was able to mimic how GameMaker itself works very accurately - down to little-known quirks and seemingly-illegal constructs.

Having written numerous custom code transpilers and generators, I was able to make the program perform sufficient compile-time analysis and generate equivalent and fairly clean JS code for input GML.

Having worked with GameMaker's HTML5 target since it's introduction, I was able to make the generated code "link up" with a running GMS-HTML5 game, allowing it to use the built-in functions directly. And not only that, but I actually made the tool "patch up" multiple built-in functions which were not working like their non-web counterparts (an issue that I was able to personally address few years later).

Having worked with JavaScript (/ECMAScript) itself for a while as well, I was able to extend Ace editor to fully support GML and behave similarly to GM itself (or, sometimes, better).

The result is a web-based piece of software which a allows the user to write and run practically any GameMaker code right in the browser. While there are, of course, some limitations, it is considered very impressive, and is something that wasn't previously thought as be possible at all.

In 2018 the tool had seen a major design update and is now also included with GMEdit.

Nuclear Throne Together An online multiplayer mod for Nuclear Throne.
modding 2016-

While my offer of collaboration to bring online multiplayer to Nuclear Throne was met with generally reasonable scepticism, the story didn't end there - half of year later my periodic investigations of GameMaker's file formats and inner workings had reached the point where it would seem like it might be possible to produce binary patches to mod select GM games.

As the initial tests have shown, the assumption was correct - it was indeed possible to modify bits of the game without it breaking horribly. Not entirely unsurprisingly, what followed next turned out to be the largest reverse engineering task I had ever done.

The result, however, is impressing - I was able to implement fairly solid online multiplayer in a game without even having source code access. While looking over the raw game logic, I was also able to narrow down and fix a multitude of smaller issues plaguing the game.

Over time I was able to introduce a variety of new additions to the game, ranging from smaller ones (spectating, replays, and coop-specific options) to texture mods, quality-of-life options, and even a GML-like scripting system.

The later resulted in hundreds of community-made mods ranging from small changes and jokes to total conversions and mods that effectively double the amount of content in the game one.

As I was later hired to work on the base game, you could say that this worked out pretty well.

I continue to periodically update the mod and use it as a playground for new experiments.

Indie Pogo A multiplayer pogo brawler game.
network programming 2016-2018

Indie Pogo is a platformer pogo brawler game for 2-4 players with an impressing number of cameo characters.

I've been involved with the game since April 2016, having done most of the game's networking and matchmaking systems.

The game released in July 2018 and currently enjoys a "very positive" (>80%) rating on Steam.

As of writing this section, a Nintendo Switch version is still in development.

Kerfuffle A multiplayer platformer fighting game.
network programming 2016-2017

Kerfuffle was a platformer fighting game for 2-4 players.

The game featured a blend of traditional fighting game mechanics, best descibed by the "easy to learn, hard to master" formula.

I've been helping with online multiplayer on the game since late January 2016.

As of 2017, the game is on hold.

I was later invited to aid on Knight Club development.

Hive Jump A multiplayer run ‘n gun game.
network programming 2016-2017

Hive Jump is a sci-fi action platformer for 1-4 players blending run ‘n gun gameplay with strategic campaigns.

I've been helping with online multiplayer on the PC version of the game since January 2016.

The game entered Steam Early Access in July 2016 and seen a full release in January 2017.

Unfortunately, for various technical and organizational reasons, the game does not hold up as well as it could, and mostly sits here as a reminder that I sometimes do netcode for non-GameMaker games too.

Color Ninjas A multiplayer painting action game.
development 2013,2015

Color Ninjas is a 2-player action game where the players compete to paint the field in their color while fighting the other player. The game features a plenty of powerups and weapons ranging from shurikens and bombs to missiles and homing sharks.

The game is a collaboration between me and Max Brovko (@insweater). Max wrote most of the game code while I've done the effects, most of the minimalistic graphics, and online multiplayer implementation. Ninja sprites were drawn by Seth Groom. GameJolt achievement icons were drawn by Airwolt.

Color Ninjas has an interesting development history - the game was originally made for a 2013' GameBoy Jam, but we weren't able to iron out the multiplayer at the time. So, with the game being overdue for the jam anyway, we decided to work on it a bit more. And then a bit more. And so, due to both me and Max being busy enough, the spontaneous development spanned for well over a year, until it was concluded that the game has been very well playable for a while now, and should be released.

In the end, the game has perfectly functional local and online multiplayer modes, a fair of variety, and some space for tactics. While it currently lacks a single-player mode (making a competent AI isn't easy), it can be fun for a while if you have someone to play with.

Snake Snafu A multiplayer snake game.
network programming 2015

A colorful snake game for 2-3 players. The goal is to grow your snake and get the opponent(s) to bop into your tail or other obstacles. There's a variety of levels, edible (and not so edible) objects, and random events.

The game is a collaboration between me and orange08. Where by "collaboration" I mean - Orange did pretty much the entire game and I did online multiplayer support and a menu.

Snake Snafu can be played with keyboard(s), gamepad(s), and over the internet.

While, being a freeware title, the game doesn't offer that much replayability, it is still delightful to play withfor a bit.

Wasteland Kings Together An online multiplayer mod for Wasteland Kings.
modding 2015

Source code coming from the same bundle as Super Crate Box, Wasteland Kings Together was my shot at fixing up the Nuclear Throne's predecessor code and adding online multiplayer support.

Akin to SCBT, the game has been updated with local and online multiplayer support for up to 4 players.

While I have fixed the majority of existing issues and improved multiple parts of the game, it, unfortunately, still noticeably lacks content in comparison to Nuclear Throne, and that could not be fixed for legal reasons.

Regardless, it's still entertaining to play for a bit.

In 2016, I have stopped updating WKT in favor of modding the current version of Nuclear Throne.

Super Crate Box Together An online multiplayer mod for Super Crate Box.
modding 2015

Late September 2015, Super Crate Box source code was made available as part of a GameMaker-themed Humble Bundle, and I have used this opportunity to make a small mod.

The result is a mod that expands the game to have local and online multiplayer support for up to 4 players, both as "cooperative" and "versus" modes.

I have also modernized the progress saving system, added a bunch of new options, and done various other small improvements.

MayhemMenusExtras

Ghost Croquet An asymmetric multiplayer versus platformer.
development 2015-

Ghost Croquet is a multiplayer platformer game in NES aesthetic.

One player controls the hero while the others take control of the monsters in attempts to kill the hero and take their place.

@ampersandbear did most of the actual game. I wrote the platformer engine, online multiplayer code, and some of the UI bits. Sleepnaut (@collapseboy) did the music.

The game was originally made for Ludum Dare 33 (theme was "You are the Monster"), and over a year reworked into a full-scale Steam release, complete with matchmaking, map editor, and Steam Workshop support for sharing maps.

Nidhogg Multiplayer fixes and extras
network programming 2015-

Mid-2015 I had the pleasure to help with fixing Nidhogg's online multiplayer code a little.

Online multiplayer code was originally implemented largely correctly, but, due to series of small unforeseen circumstances, would not work too well for a some of the players.

Over the time most of the problems have been sucessfully located and fixed, permitting the game to work as intended in vast majority of situations.

Related changes are included in updates released in late July and onward.

In 2016 I was hired again to further improve the implementation, which led to rewriting some bits of it. The game code was also migrated to use my open-source extension for Steam API networking for better stability.

In 2018 I was commissioned once more, this time to do a Discord integration.

Spelunky SD An online multiplayer mod for Spelunky Classic.
modding 2014

Spelunky SD is an expansion and modification of Derek Yu's Spelunky Classic. It includes a number of fixes and tweaks to the game, and, most notably, adds a cooperative online 2-player game mode.

Development took time from March 2014 to late June 2014, making the mod one of my largest works at time of release.

Days after initial release, the mod has already received an amount of attention, being featured on Polygon, PC Gamer, Rock, Paper, Shotgun, Destructoid, GameInformer, and a large number of smaller news sites.

The mod is available for free and is compatible with Windows. Linux beta is available via itch.io.

The title screenCooperative playMinigamesMessing with chat commands

Terrasavr A web-based Terraria profile editor.
development 2013-

Terrasavr is a web-based Terraria profile (character file)/inventory editor focusing at functionality and ease of access.

The tool written in Haxe and uses my own OpenFL-bitfive to provide Flash and HTML5 versions to cover a wide range of browsers.

Originally created during December 2013 as a simple test for new bitfive features, the tool gained a large following for it's convenience of use.

As of 2019, I continue to update it to support the game's new content as updates release.

General looksThe tool knows everything about itemsCustom item categories for ease of accessSearch feature allows to look up items easily

HaxMin A haxe-specific JavaScript minifier
development 2013

HaxMin is a JavaScript minifier with a focus on Haxe-generated code.

While the tool's compression technique is fairly standard-issue, it's key feature is in being able to maintain compatibility with Haxe's Reflection, type resolving, and runtime type information APIs, meaning that get_prop/set_prop/"prop" might be renamed to qR/wR/"R" while updating Reflect.getProperty implementation to recognize q and w as getter/setter method prefixes.

This allows to use the tool alone or as a post-processing step while relying on a JavaScript optimizer (such as Closure with renaming disabled) for further size reduction.

OpenFL-bitfive An alternative OpenFL backend for HTML5 applications.
development 2013-2015

OpenFL-bitfive is an alternative HTML5 backend for OpenFL framework.

Originally developed mid-2013, the backend allowed developers to reuse their existing Flash API code while targeting HTML5. While the default backend accomplished this with a custom renderer, bitfive relied on constructing the equivalent of Flash DOM using HTML DOM, therefore allowing it to perform far better in situations where the layout is complex but only small portions of it change at once (which is the case for most non-game software).

Later on, Flash API coverage was further expanded to support various frameworks such as HaxePunk and HaxeFlixel, allowing it to be used for lightweight games and interactive ads.

Over time, as default backend's performance continued to improve and breaking changes continued to be introduced in each new OpenFL release, I have decided to move away from OpenFL, ceasing further development of bitfive and basing the subsequent projects on "pure" Haxe+JS instead (which turned out to be a much better idea anyway).

The backend can still be used by matching it to the according archive versions of Haxe, OpenFL, and Lime (OpenFL's build tool).

LDLS-m An IDE for logical scheme simulations.
development 2013-2014

LDLS-m is a piece of software that I developed for use in a few local universities.
It replaces a ~1992 piece of software of similar name.

In short, it is an IDE (editor, compiler, interpreter, debugger) for a language resembling generalized assembly, used in programming courses to teach how low-level operations on CPU/GPU work. Improvements in my version further expanded it's scope, allowing entire microcontrollers and purpose-specific devices to be simulated.

The software was written in Haxe and compiled to JavaScript, allowing to have an easily accessible web version and native version Windows/Mac/Linux (via nwjs). Syntax highlighting was implemented via CodeMirror.

Demonstrations (animated GIFs; explanations below): General workflowA basic signed fixed point adderA block puzzle gameAn Intel 8051 emulator

  1. The editor spots a number of keyboard shortcuts for common actions and keyword/symbol insertion, allowing for faster workflow.

    Covers insertion of symbols not commonly available on Cyrillic keyboard layouts - when a language has 7 more letters than English, but keyboards don't get extra keys, this comes at cost of not being able to enter some punctuation (such as the various brackets).

  2. A slightly less basic example: addition of two signed fixed-point numbers.
    The language spots a number of syntactic structures for bit manipulation.
  3. A 15-puzzle game. Formatted input syntax can be seen here, along with swap operators and multidimensional array access.
  4. An Intel 8051 emulator, done for a small talk that I gave about the software.
    Here you can see it doing a countdown at forced 10Hz while printing every operation.
    Hexadecimal input is straight from an assembler.

    My original plan was to have it run my Impasse demake but I thought of this a little late and couldn't finish implementations of other components (keypad, display) on time.

Impasse51 A puzzle game demake for a MCS-51 microcontroller.
development 2015

Impasse51 is a demake of Flash game Impasse, developed during a "operational systems" course as an extra task of choice.

The demake was written entirely in MCS-51 (8051) assembly, played on EV8071 stand with a BC1004A display mounted on it:

Similar to the original, the game is a turn-based puzzle where the player has to get an object from left side of field to the exit on the right side, avoiding varying obstacles (all of which react to player actions in different ways).

The particular game was chosen largely due to fact that the BC1004A display fits the game's field perfectly (3 10-column rows plus an extra for the level name). Having only 128 bytes of RAM might seem like a challenge, but the game is well-suited for that as well, and I only ended up using 42 bytes.

The demake was kind of jammed out over a weekend, tested on an emulator, and then tested on actual hardware (at which point I realized that the nondescript keypad didn't handle debounce automatically). So I fixed that, tweaked a few more things, and all was well.

While downloading and running the game would have been problematic, there's a web demo that I made for a micro-talk about it - this includes a Haxe-powered recreation alongside with debug display of the memory state.

Stand overview and a blank levelFirst in-game levelAll levels match those of originalThis is where most people gave up

Polygravity A 360° platformer of a rare kind.
development 2011

PolyGravity is a short 360° platformer game that I've made for GameMake Community Jam 4 in 3 days. The Game uses 360-degree gravity, but, unlike most games of this kind, direction is not determined by gravitational sources, instead changing whenever the player touches a surface.

The game spots a distinguishable art style (achieved through a custom level/vector editor combination) and a fitting ambient score.

Unfortunately, the aforementioned editor (and the polygon-based collisions) are also the things that I've spent ~3/4 of time on, so the game's very short (~5 minutes to complete).

Still, the game received largely positive ratings and took 3rd place in the jam.

IntroEach level has it's own styleSome stranger than othersA look at the level editor

One and Light A 3d first-person platformer puzzle game.
development 2011

A short 3d platformer that I made in 3 days for a small competition[1] with a "Shrinking" theme.

The game's core mechanic is in the player's ability to grow/shrink freely. The levels are built with this in mind, relying on change of perspective for both platformer elements (easier to cross gaps if you are bigger) and progression (some places can only be entered when at your smallest).

3d GameStudio was used for this game - the built-in model editor was just good enough to make and animate the very simple characters used through the game, and the tool's BSP-style level editor had proven handy for the game's geometrical spaces.

While my lack of preparations had backfired slightly (controls were oddish), I was still able to make enough levels and puzzles for the game to last 10-25 minutes, and reviewers complimented the game's atmosphere.

It was perhaps the first project of mine to have seen any external reviews, being mentioned in a JayIsGames "weekly download" round-up, and having seen longer reviews on Oujevipo (in French) and Gamin (in Russian).

An introduction to game mechanicsAbstract themesAtmosphere through light and contrastPersonal favorite level, despite oddish colors

  1. Namely, I dared someone to this kind of a "game jam duel" instead of arguing with me over something. Then we had a random person pick us a theme and got on with it.