I’ve got a problem. It’s a self-inflicted one, although it’s one that those of you with ADHD will probably recognize.
I’ve got too many projects I want to work on.
Something I’ve been trying to figure out for a while is how to get myself to focus on a project for long enough to take it from “starting from scratch” all the way to really actually properly finishing it.
Project Management, ADHD, And Me #
Some projects are ones that I make slow progress on over time. I’ve got some ongoing home projects that don’t really have an end goal. This is mostly stuff like adding more stuff to Home Assistant so that I can automate it ( or control it from a phone ). For example, at some point I want to set up Almond & Ada, the open source and privacy focused version of Google Assistant or Alexa. I’ve been slowly extricating myself from the Google ecosystem. For example, after we moved I didn’t hook either of the two Google Home speakers back up – and haven’t missed either of them. I’ve also got some other things to fix up and tweak in Home Assistant, but they’re not super pressing so I do them when I’ve got a bit of time.
I’ve also got some projects that I’ve got a really good idea of what needs to happen, but I haven’t started yet ( or worse, have started but the project is sitting in a project box somewhere ). In some cases I even have most of the physical bits I need. A good example here is I’m building a photo booth for my sister’s upcoming wedding; I’ve already got all the hardware bits. At this point all I need to do is a bunch of coding. A non-physical example is the large number of code projects that I’ve got in various states. I’ve got a Go program I’m working on that will (hopefully) help me generate tagging rules for notmuch so that I can tag the hundred-thousand-odd emails I’ve got without having to figure out rules for all of the various senders and types of emails.
Learning How To Make A Multiplayer Game #
One project that falls into that second bucket is a game project I was working on in late 2019/early 2020. This game is actually the only thing I miss about working in an office. See, what I was doing back then was working on the game at work… after 5pm. I’d basically stay an hour or two to work on part of this game. The reason basically boiled down to “I had the office to myself and so could get an hour or two off total quiet to myself”. I just found that I was getting more done in an hour or two in the office after work than I was in three or four hours at home.
You may have noticed that I seem to have stopped working on that game in early 2020.
You’d be correct!
In March of 2020 the job I worked at moved to fully remote thanks to the COVID-19 pandemic. Since the office at the time was situated in some office space above a major transit station, this was a great idea. The downside is that I basically completely stopped working on the game. Which sucked, because I had made some really good progress!
See, I had gotten so used to working on the game in a specific environment that when forces outside my control forced me to change environments, my brain basically put a huge block on being able to work on the project more.
Which kind of sucked. A lot.
I had made good progress on the game, and was slowly forgetting everything I had done.
Tell Me About This Game Already! #
To start, credit where it’s due: the whole idea for this game came from my friend Xanthea. She came up with the whole concept for the game, and it had originally been designed as a tabletop game first. I don’t remember when she first told me about this game, it must have been mid-2019. When she told me about it, I said that I’d like to see if we could turn it into a video game.
Oh, and it has a name, too: Endless Stream1.
So the basic idea of the game is this: you control one of four characters; a warrior, a cleric, a ranger, and a wizard. The battle system originally was going to be a fairly straight-forward version of the battle system anyone who’s played an RPG like Final Fantasy2 would be familiar with. In-between battles you’d have the option to visit a shop and upgrade your gear or buy items. You’d gain XP from beating monsters that you could use to level up and unlock some abilities.
The main feature though, was that this game was meant to be played with other people while streaming the “main” screen. Think kind of like how the Jackbox Party Pack games work – only one person needs the game, everyone else just needs access to a web browser. To join, you just need a four-character alphabetic code ( which had the side effect of occasionally generating funny words ). That code is usually displayed on the screen at all times. In the Jackbox Party Pack games, once the player limit for a game has been reached any additional players are put into the “audience”. How the audience works depends on the game, in some they get to choose the next question that gets asked, in others they get to vote for a player and the player who gets the majority of the votes gets an extra point.
The game would basically be a fairly simple game loop: battle, get XP & money, spend money at the shop in-between battles, level up when you get enough XP. There would be boss battles every so often, as well.
Sounds Neat! #
It was! Is?
I had made a lot of progress, too. I had most of the backend functionality sorted; the basic server-side game loop was working, I had a super basic scripting system so that items, spells, attacks, and enemies could be updated without changing the compiled code, and I had started building a game client in Unity.
However, at this point I’ve basically forgotten what every line of code I wrote is supposed to do. On top of that, I feel I’ve gained a few new skills since early 2020 – mostly some practices and disciplines around development, stuff like how to write good unit tests, etc.
So what do I do?
Dive back into the old code base and try to get it cleaned up and refactored into a state where I’d be happy moving forward? Or start over from scratch?
The obvious3 answer: start over!
There’s a couple of reasons to do this, and no, being a masochist isn’t one of them.
The first is that jumping back into the old code might work, but if it doesn’t I’ll probably get turned off from this project for another two years. I don’t want to run the risk of burning out early on in this process because I’m spending days trying to refactor code so that I can write tests.
The second is that by starting from scratch, I can take you all on this journey with me. See, another project I’ve been trying to get re-started is this blog. For a long time now I’ve been wanting to get back to writing more regularly; I just never seem to know what to write about. By writing a developer log on this blog I get two things: a nice history of the project, and more motivation to work on the game. I’m currently thinking that I’d like to write a post every week. But to write a post, I have to have worked on the game. Additionally, once I’ve done some work on the game I’ll want to at least take notes so I can write about it later4.
It’ll also give me some motivation to fix up the blog. I’ve been wanting to give the theme an overhaul for a while now, so this will give me some extra incentive to get that done.
Lastly, I think it’ll just be fun.
So What’s The Plan? #
Right now, my plan is to do some initial project management stuff and really “start” this project later this month. I can’t start next week because I’ll be out of town for a work thing. I’ve also got to figure out some other ground rules: I need to set aside some time in the week to work on the game, and I need to decide what day is “posting day” ( ie, when a new devlog post goes up ). Right now I’m leaning towards Tuesday evenings for working on the game, and Thursday evenings for writing the devlog. I’ll give it some more thought, and later this month I’ll kick things off with the initial post.
Oh, and I’m not going to be working on the game I described above – at least not initially, I think.
I’m instead going to go with a game design I came up with a few years ago: TankAI. The idea is that the player codes up their robot tank, and then can enter it into tournaments. The games play out automatically on the server, and the results get posted. I’d probably build some kind of visual element, maybe a rendering of the battle from a top-down view as a video or something.
The main goal would be to really dive in and figure out how to make two things work well together: a turn-based battle system, and controlling things in-game via a scripting language.
There are some fun challenges that this game would have that Endless Stream won’t; for example I don’t have to worry about players in Endless Stream eating up all my CPU with infinite loops or the like. Not everything I learn doing this will transfer over from TankAI to Endless Stream, but enough should.
After TankAI I’ll do something more front-end focused; at some point I’m going to have to hammer out how to do GRPC in Unity, as well as really getting the hang of making a game in Unity. I’ll probably look at building some kind of multiplayer game, but at this point I don’t know what it’d be. It might just be Endless Stream, who knows?
Anyways, that’s enough wording for now.
If you think this is a good idea, a bad idea, a neat idea, or a terrible idea – hit me up on Twitter and let me know.
Cause you fight an endless stream of monsters AND you play it on stream! I’m so clever. ↩︎
The early 8-bit & 32-bit ones – the 2D ones, basically. ↩︎
Well, if you’re a programmer this line of thinking of obvious. ↩︎
I might even try to really up my game with git commit messages so that to write a post all I have to do is gather up all the commit messages, do some editing, take some screenshots and bam! Post ready to go! ↩︎