<< ABX! Devlog

Making My First Game!

Why I decided to make a game and all my progress up to this point

Okay, here we go—my first dev log post about my game ABX! I’ve been working on it slowly for a while now, so I might accidentally leave some stuff out, but I’ll try my best not to.

Why I Am Making a Game

Why not!?! If you’ve read my programming journey blog, you know that I think games are so cool and the idea of being able to make one is fascinating to me. So why not! I also think games are one of the best ways to learn programming because they involve so much: data structures, low-level development, memory allocation, event timing, buffers, and more. They cover a lot of ground on the programming side, and there’s even more when it comes to design. Then like I said, there’s the added benefit that they’re just cool 😎.

Core Game Idea

If this is your first time reading one of my blog posts, you should know that I’m actually an ICU nurse. I have my Bachelor of Science in Nursing and re-found programming after I graduated nursing school. When I first started this project, it was just going to be a one-to-one Galaga clone with no art. However, as I started working on it, the core game idea came to me: what if it’s antibiotics vs. bacteria? What if there was a weapon-switching system like Mega Man where certain bacteria are weak to certain antibiotics—just like in real life? And thus ABX! was born.

So it’s a Galaga-like shooter with weapon switching and player progression through a skill tree. I had more ideas like a Path of Exile-style skill tree, but decided against it since this is just my first game and I don’t want to go down the rabbit hole of feature creep.

The Stack

When I started this project, I wrote it in C because I wanted to learn the fundamentals of gamedev. I’ve been slowly going through Casey Muratori’s Handmade Hero, which uses a C-flavored C++, and I was looking at old games that ran on hardware far less powerful than modern hardware—like Doom and Thief. Using those as examples, I thought I had to use C, especially since I didn’t want to use a game engine. Again, this was and still is a learning project.

So I started with C, and at first it went well. However, once the project started getting big enough, I ran into trouble with file management and rapid iteration. On the file management side, I started to have way too many files and had no clue where anything was in my file structure anymore. I know that’s not a C issue specifically, but I don’t think C helped—I had a header file for every C file because I didn’t know how to properly lay out my systems. This led directly into my second issue: rapid iteration. It started taking me a very long time to add anything because I had to figure out exactly where it fit in the file structure without breaking anything. Then the process of adding something to a header file before I could use it became tedious because I had so many of them. Skill issue? Maybe. But like I said, C doesn’t exactly help in that department.

I then listened to a podcast with Ginger Bill and Ryan Fleury on the Wookash Podcast where each of them said in their own way that unless you’ve been programming in C for 20 years or writing for a company, if you want a great experience out of the box you should use something like Odin. Now, I’m aware that Ginger Bill wrote Odin and has a bias toward it, but hearing that from Ryan gave me the motivation to go check it out. So before making a full rewrite I wrote a Chip-8 emulator in Odin as a test. Long story short, that was one of the most pleasant experiences I’ve had writing code in a while. So now I’m in the process of doing a full rewrite in Odin because the language just makes sense to my grug brain—and I’ve already rewritten and iterated on things that would have taken me so long to do in C, and I don’t even have enemies on screen yet!

The Plan

What I’m working on right now is procedural generation of waves and enemy behavior. Once I get that kind of working—not perfect, just functional—I’m going to shift focus to player progression through some sort of leveling tree. Intermixed in all of this is creating the art for the game and eventually the music. So to wrap up, here is my current known to-do list:

To Do:

  • Finish Enemy Entry Paths
  • Create More Bacteria Types
  • Make Art For Bacteria Types
  • Make Menu, Pause, and Game Over Screens
  • Work On Player Progression