A Year in Review: 2021

So it’s January 1st 2022 and here I am writing a yearly retrospective blog post. I don’t really know how to write these, so I guess I’ll just take a look back over some of the things that I’m proud of that I did over 2021. To be honest, I’m kinda uncomfortable writing this as I don’t want to appear arrogant, but I also think that maybe it’s a good idea for me to at least acknowledge my accomplishments in the past year?

Anyway, here we go!

Started my website / blog

So as I was finishing up my full-time job in May, I started building this website in WordPress. I’ve wanted to setup a personal website for a long time, and I always had a kind of vision for what it’d look like. Ideally it would be a fullscreen interactive website, like the one for Nicalis. But it’d be some sort of simple game and that’s how the user would navigate the website. While I think it’s a cool idea on paper, it’s actually a lot of work and also it’s terrible for accessibility. So I’m glad that I finally just decided to make the simplest website possible for my blog and portfolio. It frees up more time for me to actually work on the portfolio itself.

Finished the Ray Tracer Challenge book

Something that I’ve also wanted to do for a while is tackle the Ray Tracer Challenge by Jamis Buck. I started working on this in May while I was in my full-time job. I finished the project in early August. This project was treated as an opportunity to improve my C++ skills and to start learning about graphics programming. This is the largest program I’ve written so far in C++ and I found it a very educational experience. I learned how to create and run C++ unit tests with Google Test and how to configure the project using CMake.

This is also the first program I’ve written where using unit tests gave me the freedom to optimize my code without worrying about breaking the existing functionality. Since I had good test coverage, I could iterate on my code very quickly as I wouldn’t have to spend much time testing. I got to use a variety of different techniques to figure out how to improve the ray tracer performance.

https://twitter.com/TheReccy/status/1419282865083371523

Some of the tricks I used to reduce the render times were:

  • Multi-threading to render each line using a thread
  • Variable caching to avoid expensive calculations
  • Replacing std::vector with a native array to prevent heap allocation and std::vector setup times

I’m really happy that I managed to finish this project and learn so much from it. I do have some more plans to expand on it in 2022. I think it would be cool to build a 3D editor around it so that a user can place the primitive objects in real-time and then perform a render, rather than downloading the source code and recompiling to get a render.

Made 15 Game Prototypes as part of 1 Game a Week

After finishing the Ray Tracer Challenge in early August I messaged Rami Ismail on Twitter to setup a consulting call for advice on getting better at game development. His top advice was to begin making 1 game prototype every week. There’s actually a great article on his blog that explains the premise: https://ramiismail.com/2014/02/game-a-week/.

So that’s what I did! For the rest of 2021 I made a game almost every week

Game 1 is a platformer with virtually no gameplay whatsoever.

Game 2 is a Pac-Man clone.

Game 3 is about a submarine that doesn’t really do anything.

Game 4 is about trying to not eat your own shit.

Game 5 is about herding very very dumb sheep.

Game 6 is about flying a ship in orbit around a planet.

Game 7 is a top-down train game that also has no real gameplay.

Game 8 is a tough puzzle game about escaping a ruin.

Game 9 is a slightly better platformer about trying to destroy a giant flying snake.

Game 10 is an unfinished game about trying to control the minds of your enemies.

Game 11 is a game about placing mines to defend a port.

Game 12 is an interactive fiction game about leaving your home city.

Game 13 is another unfinished game about ordering your units to create mine shafts.

Game 14 isn’t really even a game but you get to set a bunch of people on fire.

Game 15 is about you punching people in a fast-paced top-down action arena.

To be honest, most of these games are terrible… which is ok!

The whole idea of making 1 prototype every week is to figure out what does and doesn’t work, and to learn from my mistakes while getting better at game design. I made a lot of mistakes, and I wrote a blog post for each of these games where I tried to figure out what went wrong and what I’d do differently in the future.

Some of the mistakes I made are classics such as over-scoping, not managing my time well, not having a simple game concept to work on, ignoring game juice, not adding SFX or decent game art, and a few other issues that I go into in the specific blog posts.

I think overall the issues I run into with most of my games are that I focus too much on complexity and trying to come up with a clever design rather than building the toy first and failing fast. Just getting the initial idea down as a playable demo and going from there is a proven approach that I don’t seem to do as often as I should. When I do get the small toy working quickly, I can realize the idea doesn’t work out. I’m then in a position to scrap it and try something else. For example, my Ludum Dare game was made in around 12 hours, but I spent 36 hours working on a failed prototype before I scrapped it. The final 12 hour version is much better.

I also learned a lot of Unity and prototyping techniques over the last few months. I don’t think my skills are at a place I’d like them to be, but at the same time I’ve only spent a single College Semester’s worth of time on this challenge and on full-time game development. I guess it isn’t that much time in the grand scheme of things, and I still have a lot to learn!

But at the same time, I’ve learned a lot with the past 15 games.

A Year in Preview: 2022

So after building a Ray Tracer and making 15 pretty bad (but useful!) prototypes, I’m at Day 1/365 of 2022. While I have some non game development work scheduled for January and some other personal life changes going on, I have exciting game development plans for this year!

Make a Video Game

First of all, I want to make an actual full video game. Not just a 1 Game a Week or Game Jam entry, something that will take a few months. The largest game I made up until now was MAG-CHAMBER in 2016, which took 3 months of work during college. I know now that I’d be able to make that game in half the time since I’m a much more confident programmer than I was 5 years ago. Plus the fact that I can dedicate myself full-time on a game for 3-6 months makes me think that I can make something pretty cool! It could be terrible, but it could be cool. I’ll find out either way and learn a lot while doing it.

No matter what, this is the year I make an actual game!

Get a Game Development Job

Something I’ve been working on for the last few years is getting myself into a position where I can work as a game programmer full-time. Arguably I’m already doing that now, but I’d like to actually get paid for it too, and to work on a project that actually has a budget and artists and composers and designers and all that fun stuff.

I think having my 15 prototypes plus a full game will be plenty for my portfolio to get hired as a full-time Game Programmer. I do already have some experience as a Game Programmer Intern in 2018, so I’m sure with the extra work I’m putting in this year I’ll be able to get myself into that position. If I don’t, then at least I’ll have made a game and will be in a stronger position for 2023! But for real, getting hired this year would be great. If you’re a recruiter reading this, here’s my contact details.

Add a 3D Editor to my Ray Tracer

I’d love to make improvements to my Ray Tracer to add in extra features and fix some bugs. The major change being an actual real time 3D Editor. While I don’t use C++ for my day-to-day work, I do enjoy playing around with a language that uses manual memory management and gives me the opportunity to use lower level optimization techniques. This is low priority compared to my other two plans, but I hope to get a good shot at this later in the year!

So that’s it!

That’s my post. Me looking back on 2021 and looking forward to 2022. Writing this felt pretty strange, since usually I’d keep all of this stuff private on a .txt file that would get lost somewhere on my hard drive. But now everybody can read it on my blog, which is cool since now I can’t back out of my commitments!

I do want to get my main goals done for this year, but I’m sure I’ll also meander a bit and end up doing other smaller projects. I think Making a Video Game and Getting a Game Programmer Job are both pretty big goals, but at least they’re clear and I can work towards them this year. Updating my Ray Tracer is something that’s a much lower priority, but I think it will be a fun project I can work on during 2022’s Winter once I’m in a job. Hopefully.

I hope everyone reading this had a great New Year and I hope you all stay safe and stick around for next year! Thanks a lot for reading ❤️

Leave a comment