propaganda

2017 Shakedown

Oh, it’s dat time of the year again. All in all, it was a good year, but aren’t they all good?

To put things into perspective, here are some charts generated by GitHub.

2017

2016

2015

A tad bit less contributions this year, compared to 2016, but as you can see on the chart it has been “more concentrated” (meaning, more dark green spots).

Fz2D

Fz2D received a batch of small updates, but it still didn’t graduate from alpha to beta, like I would have hoped.

With the advent of ES5 and ES6 being rolled out in all major browsers, I feel like the 5 minutes of fame of CoffeeScript expired and we can start writing slightly more structured things in pure JS, without resorting to all those 1998 style tricks.

All that being said, most likely I will “transpile” the code-base into modern JS with a tool like decaffeinate and then of course clean it by hand as necessary.

Feel free to take a peek at the documentation available over here.

Simon8

In other news, I ported my Chip 8 emulator (read: interpreter) to JavaScript via emscripten.

You can check it out over here.

Testa

I also released Testa which is a portable single file “(unit) test framework” for C/C++.

You can check it out over here.

ASMToy

This was something that I wanted to try out for quite some time now.

ASMToy is dosbox compiled to JavaScript running a modified Flat Assembler IDE for DOS.

The changes do not let you reboot or escape the confines of the IDE.

In effect, it lets you play with 16-bit assembly in DOS, right in your browser.

Doom Brush

This has been inspired by Joshua Skelly’s work, who is writing a small tool that can “transpile” a TMX Map (produced by the Tiled 2D map editor) into a Quake map.

In my case, I had two goals:

  1. “transpile” a Wavefront OBJ model file into brushes and entities
  2. write a Tiled plugin exporter plugin, that can export “object layers” as brushes and entities; with the brushes being constructed from the “polygon” objects defined within the editor itself (should be reasonably simple ..)

Managed to achieve the first goal and I am quite happy with the library I wrote, but it still needs a little bit of clean-up, because some the of API is a bit confusing at the moment.

As far as the second goal is concerned, I managed to “sketch” out the skeleton of the exporter plugin, but didn’t get to implement any of the actual functionality.

I’ll release the source code most likely sometime next year.

Nixel

Yet again, my primary focus has been Nixel which is the codename of the game engine and framework I’ve been hacking on for ages.

This year, I managed to figure out a number of technical conundrums and investigated which “GUI framework” to use for the tools. In the end, I just decided to roll my own “Immediate Mode GUI” (IMGUI), because everything had too many dependencies or some weird and intricate layout system.

For some time, I considered that perhaps Electron could be the answer, because now that we have flexbox, one doesn’t have to resort to “floating elements” and “tables” to make reasonably complicated layouts.

But in the end, it felt like pulling in way too many dependencies and that is something that I am paying enormous amounts of attention to.

One of the primary problems of both closed and open source projects are dependencies.

If the dependencies are hard to install or hard build and not self-contained enough to be bundled with the project, then it becomes a nightmare to build and maintain the project. In turn this will automatically increase the barrier of entry for new contributors, as well as hinder porting and general maintenance over time.

I also decided to roll with JS as a scripting language, relying on the excellent Duktape, instead of Lua. We’ll see how this will pan out in the long run, but so far it appears that it will be “fast” enough and the GC can be kept under control.

You have to realize that, we are talking about a very tight event loop, where every millisecond is precious and one wants to waste as few as possible.

Next year, I’ll try to delve into these things in a little bit more detail, so you can expect more content from me, rather than the average of 1-2 posts per year, which is nothing less than appalling if you ask me.

Nintendo Switch

Like millions of people around this piece of this of a rock floating in space, I got a Nintendo Switch, shortly after its release, together with the Wolf Link Amiibo.

Game Medium Hours Played Notes
The Legend of Zelda: BOTW cartridge 200+ n/a
Kingdom digital 30+ n/a
Skyrim digital 10+ n/a
Snake Pass digital 2 or less n/a
Mario Kart 8 Deluxe digital 1 or less n/a
Oceanhorn digital 1 or less n/a
Shephy digital 1 or less n/a
Morphite digital 1 or less n/a
Little Inferno digital 1 or less completed on PC
World of Goo digital 1 or less completed on PC
The Flame in The Flood digital 1 or less n/a

By the way, NO, I didn’t lick the cartridge.

All I can say is that Nintendo did it again. If only Sony would have invested slightly more in the PS Vita (which I also own), I think that this could have been more of a battle, rather than just stealing the show without any competition.

The dual function of the Switch is the prime thing that makes it apart and contributed to its resounding success.

After all, we all know that the Switch was been DOOMed from the get go, right?

End

And here we are. Before I wrap this up though, my game of the year has been The Legend of Zelda: BOTW, without any doubts. I mean, it’s quite self evident given the number of hours I sank into it.

Oh and also, after many years of using Meslo LG Mono as my primary font, a few months ago I made the switch to IBM Plex Mono. So far so good, but it still remains to be seen if I’ll revert, because I am not totally convinced just yet.


2017-12-31