2017 Year in Review

This year I did a bunch of things, but one thing I didn’t do was blog about every single thing. Here’s a roundup of everything I missed.

I made some games

I made three games this year for Ludum Dare 38, 39, and 40: Rogue Basement, Power-Q, and Please, Come In. Their collective soundtracks contain five original songs.

The only one I really dedicated myself to during Ludum Dare was Rogue Basement, and it shows in the ratings. The other two were experiments with frameworks and genres. But I did polish Power-Q for an iOS release, and you can get it now!

It feels good to hit a new personal best in game releases, because it means I’m more motivated than ever to take my coding to creative places. And the consistent quality of each game demonstrates how much I’ve learned about game design over time. Rogue Basement and Power-Q eclipse all ~15 other games I’ve ever made in terms of fun and polish.

I wrote some open source libraries

Early in the year, I was looking into ways to manage a local music collection and make playback control available to everyone on my home network. After becoming frustrated with the mpd ecosystem and discovering beets, I wrote a collection of Python and JavaScript code called Summertunes to marry beets to the MPV player with an iTunes-like web interface. Eventually I wrote some small patches for beets and packaged it all up as a beets plugin and Python package. But I haven’t made any noise about it at all because it’s a lot of trouble to set up, and some features aren’t as reliable as I’d like.

Before writing Rogue Basement, I wrote clubsandwich. It’s a framework for making roguelikes in Python 3 built on the BearLibTerminal retro-terminal-style rendering & input library. It has comprehensive documentation and examples.

Before writing Please, Come In, I wrote Jumbo Grove. It’s a framework for writing interactive fiction in JavaScript built on Vue.js. It has comprehensive documentation and examples.

(Obviously there’s a theme to the last two, and it’s a topic I plan to write about soon.)

This year I made a very small number of changes to Literally Canvas. I am still mystified by the popularity of this library. Or, mystified that no one else is interested in maintaining it despite it being part of their business.

And finally, I helped the pyglet project overhaul its documentation tooling. They had used epydoc for years and had switched to a hacky Sphinx setup that was breaking down on recent Python and Sphinx releases. (I did something similar for pillow in 2015.)

I worked on some apps

At the beginning of the year, I got involved with Ragtag and started working on a tool for publishing political calls to action. I made an MVP, but wasn’t able to drum up any interest, so I abandoned it. This and another potential project taught me that I don’t have the mental energy to take on projects that amount to second jobs: projects with teams, external requirements, and tools I don’t happen to be interested in. I have a lot of raw output, but unless a project follows my obsession of the month and has no stakes, it’s draining instead of energizing. Donating money is much easier. I don’t want to burn out.

At some point I decided to take a structured approach to working through my 3-digit Steam backlog. I imported everything into Completionator, wrote a scraper for its Excel export feature, and wrote a command line tool to suggest games for me to play. (While kind of neat, this approach didn’t work because I still buy Humble Bundles faster than I can get through the games…)

Late in the year, I made a small UI polish update to Sendimals and stuck some Google ads at the bottom of the top-level screen. Sendimals now has revenue of two dollars per month. I developed a new way of coloring body parts (our #1 feature request) but haven’t yet found the motivation to update all the UI and data structures to support it.

I made some videos

I sort of have a YouTube channel now. I made it to host my Rogue Basement timelapse and update videos. Later on, I got the idea to dig up my old games, get them running on modern macOS, and do video captures for posterity.

I learned some new tech

My weapons of choice are Python 3, Swift, and ES6. I didn’t branch out from those languages this year, but there was a lot to learn within those domains.

In the JavaScript world, I learned about HTML5 audio, and built a library on Vue.js. (Yeah, it really is better than React.)

In Apple’s domain, I learned SpriteKit, GameplayKit, and the Entity-Component-System design pattern.

I dug deep into the world of roguelikes this year. It’s a really fun genre to work in as a programmer, because you can go as shallow or deep as you want in different aspects of game design. I spent a lot of time with game architecture design patterns and procedural level algorithms.

I discovered some tools

2017 was the year I discovered itch.io. They’re doing an amazing job of cultivating the Truly Indie™ game scene. They basically run the bar where all the up-and-coming local bands play, except “local” is “everywhere.”

While making art for Power-Q, I discovered Aseprite, an amazing pixel art tool.

I became a better drummer

I practice drums 2-4 days a week after work and over the weekend. I can’t really claim any milestones here, but if my band ever gets off the ground, you might get a chance to hear me on an EP!

I played a lot of video games

This isn’t really an achievement, but here’s a random Games of the Year list in the middle of a post about creative output.

The Steve Johnson Outstanding Achievement in Game Design Awards

XCOM 2 and Super Mega Baseball: Extra Innings

The Steve Johnson This Is A Good Roguelike Awards

Tales of Maj’Eyal 4 and HyperRogue

The Steve Johnson I Don’t Hate This First Person Shooter Awards

Ziggurat and Borderlands 2

The Steve Johnson This Game Deserves An Award Awards

Rocket League and The Witness

When I write all that out it seems like a lot

Those are the things I did with my nights and weekends in 2017! In retrospect, it looks like I overdid it. Time will tell if I manage to tone it down this year.