Catching Up… Again

It’s been over a month since my last update, so there is plenty of stuff to catch up on. Besides enjoying the strangely unseasonably warm weather, I spent the last little while working on ongoing projects, as well as getting serious about job hunting.

Endless Pac-Man

Pac-Man 2.0

Progress has been pretty good on this prototype game. Since my last update I’ve added 4 different types of enemies modeled after the original ghosts in Pac-Man. Each ghost has a slightly different strategy that adds a bit of variety to the game.

  • Red - Hunts down the player using a simple approach outlined here.
  • Pink - Sits in waiting until it can see the player, then pursues in that direction.
  • Orange - Always moves downward, picking left/right based on the proximity to the player
  • Cyan - Always turns left

I’ve also added a slowly encroaching edge-of-the-world at the bottom of the map to keep players moving forward. It also lets me recycle old tiles so I can keep performance stable. I’m working on getting the power pellet implemented so the player has some way to deal with an endless train of pursuing red ghosts. I also need to add a score tracker to give the game a sense of purpose.

You can play the latest version here.

Quake++

Quake++ Source

Taking inspiration from Philip Buuck’s Handmade Quake project, I’ve also started working on a C++ port of the original Quake source code. The project looks like a great way to kill two hypothetical birds with one stone. Diving through the source code of a classic like Quake (available on GitHub here) is a great way to see the kind of challenges involved in building a game engine from scratch. It also lets me put the C++ Core Guidelines and Guideline Support Library (GSL) into practice when dealing with legacy C code. Switching everything over from raw pointers and lengths to gsl::spans and STL algorithms has been quite a learning experience.

It’s been great trying to understand all the different subsystems built into the Quake engine. From command buffers to registering global variables, there are a lot of low-level subsystems for managing resources and piping commands through the engine. I’m looking forward to building out enough infrastructure code to be able to start digging into the graphics pipeline.

I’m attempting to have a system for keeping track of my progress so far - I’m about 10% of the way through the original source files - but that’s still in the works. At this point, I’m able to start the game and create a nice black window. Practically finished, right?

Updated: