Contact me Vadim „YellowAfterlife” Dyachenko

About

What's here and why.

Hello there.

My name is Vadim, on the internet I'm more known as YellowAfterlife, and this is my portfolio page of sorts. Click the project sections to expand information about them.

Sections marked as [ · · · ] are work-in-progress.

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

You can also follow me on Twitter, Tumblr, or VK - I constantly post about the new interesting things that I'm working on.

Projects

GMLive

GML right in the browser.

GMLive (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 implementations.

Having worked with JavaScript (/ECMAScript) itself for a while as well, I was able to finetune an existing code editor plugin to behave much akin to (and, in some aspects, better than) GameMaker's code editor.

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.

Overall, I was likely one of the few people that could have done something like this, and did the task well.

Nuclear Throne Together

An online multiplayer mod for Nuclear Throne.

Nuclear Throne Together (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, 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. And not only that, but while looking over the game logic in rawest form possible I was also able to narrow down and fix a multitude of small issues that the game had.

I had also made numerous small additions (both multiplayer and convenience related) and continue to experiment with the project time to time.

Overall it is both an interesting and an unusual project. See the blog post for more information.

Indie pogo

A multiplayer pogo brawler game.

Indie Pogo

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

I'm helping with online multiplayer on the game since April 2016.

Kerfuffle

A multiplayer platformer fighting game.

Kerfuffle (2016-)

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

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

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

Hive Jump

A multiplayer run ‘n gun game.

Hive Jump (2016-)

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

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

Hive Jump is availble via Steam' Early Access since July 2016, full release being in January 2017.

Color Ninjas

A multiplayer painting action game.

Color Ninjas (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.

Snake Snafu (2015-)

Snake Snafu is 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 (@thatorange08). Orange did pretty much the entire game and I've implemented online multiplayer support.

Snake Snafu can be played with keyboard(s), gamepad(s), and over the internet. The game also has a single-player mode (for practice), but it's worth saying that multiplayer is much more fun.

Wasteland Kings Together

An online multiplayer mod for Wasteland Kings.

Wasteland Kings Together (2015-2016)

Source code coming from the same bundle as Super Crate Box, Wasteland Kings Together is 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 cannot be fixed for legal reasons.

Regardless, it's still entertaining to play for a bit, and gives an idea of what online multiplayer could have been like in the game even if the implementation was to be rushed a little.

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.

Super Crate Box Together (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.

Don't Crawl

An asymmetric multiplayer versus platformer.

Don't Crawl (2015-)

Don't Crawl is a multiplayer platformer game in NES stylistic.

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

@ampersandbear done 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.

Multiplayer fixes for Nidhogg (2015, 2016)

Mid-2015 I've 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.

Spelunky SD

An online multiplayer mod for Spelunky Classic.

Spelunky SD (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 an endless number of smaller sites.

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

Screenshots:

Title screen. Cooperative play. Minigames. Using chat commands.

Terrasavr

A web-based Terraria profile editor.

Terrasavr (2013-)

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

The program written in Haxe and uses OpenFL-bitfive to provide Flash and HTML5 versions to cover a wide array of desktop browsers.

Originally created during December 2013, the program is being continuously updated to support new game versions and features.

Terrasavr has been widely praised for convenience, and remains a popular piece of software.

Links:
blog post HTML5 version Flash version

Screenshots:

Inventory editing. Editor shows tooltips as they appear in-game. Multiple collections of items are available at hand. Item search in action.

HaxMin

A better minifier for Haxe-JavaScript.

HaxMin (2013-)

HaxMin is a JavaScript minifier and obfuscator, written in Haxe, and intended for use with Haxe-generated JavaScript sources.

A common problem with using JavaScript obfuscators on code generated by Haxe is lack of compatibility with Reflection and Type APIs - process of renaming variables often doesn't account the fact that field names and strings may be used more than in one place, such as for tweening. Result is expected - applications tend to not work correctly, if at all, after obfuscation.

HaxMin, on other hand, approaches the problem differently. Identifiers are counted by number of references in all applicable forms and then renamed in groups - this way x, get_x, set_x and Reflect.field("x") are renamed at once, keeping compatibility intact.

Being primarily a JavaScript minifier, HaxMin is also able to minify code not produced with Haxe. This can be particularly useful in situations where size optimization is needed at no expense to external interfaces.

On average, HaxMin reduces size of a Haxe-generated files by a third, and size of human-made files by half. In combination with other tools and methods this can be used to lower application size to third or fourth of original.

Links:
GitHub repository

OpenFL-bitfive

An alternative OpenFL backend for better HTML5 apps.

OpenFL-bitfive (2013-)

OpenFL-bitfive is an alternative HTML5 backend for OpenFL framework, which [the backend] I've developed over the course of August, 2013.

Similar to standard OpenFL-HTML5 backend, it permits the user to develop Flash and HTML5 applications from single source, but does so differently, permitting certain kinds of applications to perform much more efficiently, also on mobile devices.

Various Haxe-based frameworks (such as HaxePunk or HaxeFlixel) also work with bitfive.

Links:
blog post GitHub repository

LDLS-m

An IDE for logical scheme simulations.

LDLS-m (2013-2014)

LDLS-m is a program that I have developed as part of my final year' university project.

It is a remake and replacement for an older piece of software that was used in a few courses in the particular university.

Similar to it's predecessor, the program permits the user to write "microprograms" that define register\RAM-like structures and work with them via a programming language that resembles generalized assembly.

In the educational process it is primarily used for simulating low-level computational processes done in CPU\FPU, but the improvements in my version make the software viable for simulating entire microcontrollers.

The program is an "all-in-one" piece consisting of a code editor (left pane), output area (right pane), menu (top), and a basic debugger.

On the technical side, it is written in Haxe and compiled to JavaScript. This permitted to have a web version (note: non-English UI) and a downloadable version compiled via node-webkit.

Demonstrations (animated GIFs; explanations below):

The general workflow A basic signed fixed point adder A block puzzle game An Intel MCS-51 emulator

  1. The editor spots a number of keyboard shortcuts that permit quickly inserting the commonly used keywords and operators (the symbols for which are partially missing in Cyrillic keyboard layouts).
  2. A slightly less basic sample program, handling addition of two signed fixed-point numbers. The programming language spots a plenty of syntax (and associated error checking) for working with bits of structures, making this an easy feat.
  3. A sliding block puzzle game also known as a 15-puzzle. Formatted input can be seen here, as well as a few "swap" operators.
  4. An Intel MCS-51 emulator, taking input (a hexadecimal string) straight out of a related assembler, made for a presentation about the program. The GIF shows it executing a countdown while clamped to 10Hz.
    Mostly a show of the program's ability to handle larger task and sets of data (ROM is stored as 65536 8-bit cells, parsed from a 512Kb register containing a stream of charcodes).

Impasse51

A puzzle game for MCS-51 microcontroller.

Impasse51 (2012)

Impasse51 is a demake of Flash game Impasse, which [the demake] I've developed at the "operational systems" course as an extra task of choice.

Game is written entirely in MCS-51 assembly, and is to be 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). Fitting the game data into 128 bytes of RAM was slightly challenging, but manageable through a couple of bitwise operations and cyclic shifts. The final version of the game would only use 42 bytes of RAM.

Downloading and running the game would be problematic, since it's bound to specific hardware, but you can play a Haxe-powered simulation of game which I've made for a later micro-talk about it. The simulation also includes a visual representation of memory used by the game.

Stand overview. And the "error" level. First in-game level. Levels are equivalent to the original. Where things get hard.

Overall, while making games in assembly may not be that fun of an activity sometimes, it was a interesting experience.

PolyGravity

A 360° platformer of rare kind.

PolyGravity (2011)

PolyGravity is a short 360° platformer game that I've made for GMC Jam 4 in 3 days.
Game uses 360-degree gravity, but, unlike most games of this kind, gravity direction is not determined by "planets" but is changed upon hitting surfaces.

The game spots a distinguishable art style (achieved through a custom editor) 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).

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

Links: Download

Screenshots:

Tutorial level General style Overview of the "Warmth" level The level editor Before leap of faith in "Sun" level Perhaps the strangest level

One and Light

A 3d first-person platformer puzzle game.

One and Light (2011)

One and Light is a short 3d platformer game, which I've developed in 3 days for a small competition with the theme being "Shrinking".

The game's core mechanic is in the player's ability to grow/shrink freely. The levels are built with this in mind, having a plenty of parts where the perception depends on the player's size.

The game was made in "3d GameStudio", using it's built-in tools for modelling and level design and code being written in software's C variant. While my lack of toolset preparations has backfired slightly, the game still was complimented for the use of lighting and level design.

In the end the game came out as average-length (10-30 minutes to complete) received fairly positive ratings, won the said competition, and was featured on a few websites.

Coverage:

Screenshots:

An introduction to the game' mechanics A bit of atmosphere in the "night" level Small secrets A piece from the ending cutscene