I always promised myself that if I was ever unemployed that I’d make a video game. When life dealt me an unpaid work hiatus though, the last thing I wanted to do was code in my spare time1. I worried I would have to let that dream, that part of me, die on the vine. But as interviews started going well the desire to try my hand at making a game came back. And in true adult ADHD fashion I didn’t focus on one game, but rather made a half-dozen different games in different formats and three of those games have made it to the release stage. Here’s an overview of those games and a little background on how I manage to make them.
Mundango, a bingo game about life’s small things
During my unpaid hiatus I found myself getting a lot of pleasure in the small things; seeing a cool bird, staring at trees, or watching animals be animal-like. To not lose sight of those moments and with a desire to replace my social media addiction, I made Mundango, a bingo game about noticing life’s small things.
The icon is a chill turtle because it invokes the feeling of going slow. The font is a playful little handwritten sans. And there’s a (Japan-inspired) minor pentatonic scale that plays as you check items off. I hope you enjoy it but more importantly I hope it nudges you (and myself) to stop doomscrolling on our phones so much and to start looking outside the windows a bit more often.
Hard Code & Soft Skills, a workplace adventure
In January, the unemployment got to my head and I got inspired to make a role playing game called Hard Code & Soft Skills. It’s a workplace-themed2 clone of Lasers & Feelings, a one-pager by John Harper. The original game is loosely based on Star Trek, where you can use lasers or diplomacy to solve your problems. I wanted to flip that a bit and have the game world be a startup because tech needs to realize that soft skills are as valuable as code, so that’s my big social commentary.
It wasn’t labor intensive to clone the original game, but I put a lot of time into building a little one-page website with a character generator. It’s Astro and web components, if you’re curious. I also put a lot of mental energy in planning out the first episode of Hard Code & Soft Skills on Shop Talk. It went better than I could have imagined and what a thrill to get it out the door.
Pentablaster, an instrument with no wrong notes
The pentatonic scale sound effects in Mundango were a hit with some folks, so I dug in and built a whole instrument that only plays pentatonic scales and called it Pentablaster! It took about a week and I’m pleased with how it turned out. It’s jammy and a little unique. I extended it to allow you to change the key and to choose which pentatonic scale you want to play.
There’s some features I’d like to add, but worry it’ll enter the “so complicated I don’t want to work on it anymore” paradox. I’ll park it for now, but I learned a lot about Tone.js in the process.
An unreleased solitaire game
I went on a short bender learning about Solo RPGs (like Ronin) and that sparked an interest in trying my hand at making one. I challenged myself to prototype the game on pen and paper first to prove the game mechanics. After an evening of brainstorming, I devised a game system based on a standard 52-card deck of playing cards as a prototype. I play-tested it with my son and we both thought that I should make a mobile app version. After some nights and weekends, I had a rough alpha prototype.
I play-tested the game with friends in the ShopTalk Discord and I got great, actionable feedback. They confirmed my suspicion that the RNG (randomness) was too high, creating a lack of decision making agency and thereby ruining the fun. I made some tweaks and the second round of play-tests went much better. It’s feeling pretty good now, but I think there’s one more ingredient needed to tie it all together before public release.
An unreleased Playdate game
Since acquiring a little yellow wind-up boi, it’s been a small dream to write a game for Playdate and I picked the idea that seemed like the easiest and most PlayDate’y and descoped the hell out of it so that I’d have an achievable goal. It’s an office-themed3 RPG type game.
After playing with Playdate’s web-based game editor Pulp and trying PulpScript, I felt the chafing of limitations and wanted to get closer to the metal. I watched every one of SquidGod’s Development Tutorials and decided to download the Playdate SDK and write the game in Lua. This is my first time writing Lua and it’s been interesting because everything in Lua is a table: Arrays are tables, Dictionaries are tables, Objects are tables… tables all the way down. That takes some “undoing” of prior programming best practices to feel comfortable but after awhile you learn to embrace the chaos and for-loopedness.
To short cut some of the player controllers and level building I picked Cotton, a Lua-based framework for Playdate. Cotton uses the LDtk map editor for easier map making and that was a feature I was looking forward to using. However, I encountered a bug somewhere between the framework and LDtk. If I updated the map, my player could no longer get to a different room. Insecurity started to set in:
- Is this bug because I don’t know Lua?
- Is this bug because I don’t understand LDtk?
- Or is this a bug somewhere in Cotton?
Feedback from the Playdate Dev Discord was “Last commit is 2 years ago, project’s dead” and “Use [Framework X] instead”… 😮💨 Ugh. I thought only JavaScript dorks did this but apparently Lua dorks do it too. I understand they’re trying to be a version of helpful; but this is terrible advice for someone who is learning. “You need to start over” or in video game parlance “The Princess is in another castle” kills the dopamine rush needed when learning something new.
But I didn’t give up. And after many shower thoughts, I mustered up the energy to do some good ol’ fashioned debugging. The first step was step-by-step isolation where I manually diff’d thousands of lines of JSON line-by-line. That one step taught me there was a change in the exported JSON somewhere between the version of LDtk that Cotton used (v1.3) and the latest version of LDtk (v1.5.3). The primary key for joining map tiles no longer exists in v1.5.3. Then I followed the breadcrumb trail of how Cotton imports LDtk files and I fixed the bug by creating a new table (because Lua) to act as a join table for the neighboring map tiles.
I was able to finish my core game loop and I’m proud of that, but fixing a framework level bug cut the wind out of my sails. I may PR the bug fix… but it’s more of a patch job than a holistic fix and I’m unsure if the author of Cotton is even interested in supporting that on their abandoned project.
Will this game ever come out? I hope so, but it’s emotionally hard to pick up after fighting with it so much. If I buckled down, built some assets, and wrote more NPC dialog I bet I could finish it in a couple human weeks of work. Perhaps I could outsource the asset creation.
How the sausage gets made
I make my games after the kids and spouse go to bed or while the TV runs mindlessly. In some ways I’m borrowing from my own mental health staying up late tinkering with little apps that I’m going to give away for free. But these ideas all occupy brain RAM, so it feels good to chip away at ideas and get them out the door, to make room for more ideas, to chip away at ideas, to get them out the door… it’s a vicious cycle, but I think a net positive for my mental health.
To hedge against wasting my spare time, I get prototypes out for review as soon as possible to gauge interest and invest accordingly. Shopping prototypes curbs emotional over-investment in an idea. Time builds attachment to bad ideas, making them seem good and grander in your head than reality. If you build in secret too long, it ends in disappointment when the public doesn’t understand your genius you spent all your time on.
I default to web tech because it’s what I know best and staying in your wheelhouse means you can move faster with less mystery roadblocks (like the LDtk map issue above). But I’d like NOT WORK to not feel like work and see value in that, so this may change going forward.
At times I create artificial limitations (e.g., limit myself to a single asset pack) because if the scope is overly broad and infinite, that guarantees failure. Having rules, even if arbitrary, allows for play.
The last tool in the toolbelt is scoping the hell out of my ideas. When attention is your biggest limitation (e.g. ADHD) then keeping checkpoints small and achievable are critical. Then once you have the foundations established, do as much as time and ambition allow.
Unsure of what’s next… or how to book all of your free time from now until death with no promise of financial gain.
I have dozens of ideas kicking around in my head at all times, so my main issue is prioritization. Here’s the ideas that occupy a lot of brain RAM:
- Finishing my son’s Zelda-like
- An ambitious battle royale that would take a hundred developers a hundred years to finish
- A platformer with a slime mechanic
- A local multiplayer game that has a Mario Kart vibe, but isn’t a karting game.
- A Solid Snake stealth game but for escaping awkward social situations
- A horror game parody
- Tim McGraw’s What-if? Trucks: Fates
- A space shooter / medical sim
- A Contra-like with a dumb twist
That’s a sampling of what’s going on up in the ol’ electric meatball. Not to be too macabre, but I’m not sure I have the lifespan left to get through even half of that short list. Hopefully there’s a banger billion dollar idea in there that allows me to retire and work on all the non-profitable dumb ideas.
While doing this for a living is far off and/or will never happen I am at least pleased that I lived up to the promise to myself to make games if I had spare time. I made games, smaller in scope than what I had originally imagined, but I’m comfortable with that given the timelines. No regrets there.
Risky as it may be, I may jump to a 3D engine because I’ve had a lot of fun building in environments like Unity in the past. That balloons the scope and raises the level of difficulty beyond my current expertise and it has never worked in the past… but perhaps this time it’ll be different! 😂