The simplest way to say this is “I’m writing the blog I wish I could have read when I first wanted to make games.” I taught myself C++ in the late 90s, when I was in high school. I spent many years doing other things after that, but about five years ago I decided to go back, start programming again, and make games. I want this to be the blog that I would have loved to find at that time.
I want to help you, the reader, become the best programmer at your job. I want you to be the person that people ask for help when they get stuck. I want you to understand computers on the lowest level as is practical for a software engineer. You will not know everything off the top of your head, but the idea of pushing bytes of data to a sound card or debugging floating point number behavior shouldn’t scare you – it should be more a matter of learning the proper API and using logic to create solutions to the problem at hand.
Game programming has had a drastic reduction in its barriers to entry over the past several years, and that’s a good thing. It’s good that anyone can make a game today, whether through coding from scratch or using Game Maker. The industry and the art are better off for that. But my ambitions for you are higher than the lowest barrier of entry. I want you to be able to do anything. Once you really get a feel for how a program works, really get down in the dirt of registers, C code, byte packing, and bit shifts, the curtain starts to fall, and you begin to understand how everything works together. If we can start laying the foundations of proper program development, we will become truly great programmers, and then we can do anything we want.
This is how the great game creators work. What is your favorite game ever? What do you think stands high and away as the best thing you’ve ever played? Whatever game you’re thinking of, I can promise you that it came to life because it had some top notch programmers making sure that the vision of the developer and the artwork from the artists came together just like they had to. When they started their work, there was nothing. But then the programmers started to type. And line by line, computer instruction by computer instruction, this piece of art that has captivated you came to life.
Programming is a skill that anyone with the drive to learn can learn. Don’t worry if you feel like you can never be good enough. And definitely don’t say the word talent. In my experience on earth, talent is nothing more than drive. A ‘talented’ person is just someone who spends regular, consistent time thinking about something. It doesn’t need to be every waking minute. You don’t need to suffer or struggle. You just need to put in consistent time, and every time you do, you will get better. This adds up, and day by day, you will become a developer who can make anything.
The initial focus of this blog will be through the Handmade Quake project – a rebuilding of the original Quake, complete with software renderer, as though we were building it ourselves. I believe that the foundation of modern game programming can be seen through Quake, and it will be the platform we use to cover building a complete game from scratch. We may take detours along the way, but this will be our guiding post as we move from C in general to game systems to a fully functioning multiplayer game.
I intend to make this as easy for you as possible, but I will not coddle you. There’s a lot to learn, and it takes hard hours of study to really comprehend what happens in a fully developed program. But we will take it step by step, and remember, you have all the time you need. Be consistent, make sure you understand what we talk about, and you will succeed.