Video Games: How I Started Programming
2017-08-13Video games are pretty much the reason I originally learned programming. The first game that really interested me was Paratrooper, which I played for the first time on my uncle's DOS computer. I asked him how people make games like that. I knew you could tell a computer how to do things with simple DOS commands like "dir" and "cd", but I couldn't wrap my little (probably less than 10-year-old) head around how one could tell a computer what a helicopter was or to make that helicopter fly across the screen. Unfortunately, my uncle couldn't explain that to me, at least not in a way that I found satisfactory. I was still curious, but I didn't pursue it further at the time, even after my family got our own DOS computer.
A few years later, when I was about 12 years old, my favorite game was Banjo-Kazooie. Before the game came out, I downloaded all the preview gameplay videos I could find, tying up the phone line for hours with the dial-up connection. I remember that the game came out in June and it seemed like an awfully long time to wait from the last day of school sometime in May. I was pretty obsessed. Anyway, at some point I remember visiting the website of Rare, the game's developer, and looking at their jobs page. It seemed like the main skill required was C++.
I didn't exactly know what C++ was, but I almost immediately went and told my dad that I needed to buy a C++ book. We bought Sam's Teach Yourself C++ in 21 Days. It came with a CD that contained a compiler. Although that probably wasn't the best way for a beginner to learn programming, it was enough to get me started. I remember being so excited about that book that I had to restrain myself from reading through it too fast. I tried to only let myself read one "day"/chapter each day and did all the exercises.
Of course, I was eager to apply my new knowledge to games. I think the first real program I made that wasn't an exercise from the C++ book was a Tic-Tac-Toe game with ASCII graphics. I had a lot of fun making that game and creating the opponent "AI". But after doing that, I decided that I needed to learn how to draw real graphics.
I bought another book and this one was specifically about creating games. I learned how to control the graphics card using VGA mode 13h. I was so excited the first time I was able to draw a simple square on the screen. And I was even more excited when I could move that square around using the keyboard.
I started trying to make a clone of Paratrooper. In that game, you can rotate your gun's turret using the keyboard. I tried to trace out a circle, but I didn't really know how to do that. I took a guess at what I thought must've been the distance formula: x + y. Of course I had no idea that what I was looking for was called the "distance formula" or that the formula I'd used was Manhattan distance rather than Euclidean distance. But when my circle ended up looking like a square, I figured I better go learn some more math. I started reading my dad's old trigonometry book. It was a bit of a challenge for me since I hadn't taken Algebra yet, but I was able to find what I needed. I'd credit that experience with helping to spark my interest in math.
By the time I entered high school, I already had a pretty good grasp of the fundamentals of programming. And my projects got more sophisticated as I learned about Win32, DirectX, and 3D math. I created a simple, yet fully-functional top-down 2D space shooter and then a 3D version of the shooter. But once I entered college and started doing summer internships, all of which involved writing other sorts of programs, it seemed like there just wasn't enough time to work on games as much anymore.
Over the last 9 years of my career as a professional software engineer (outside of the game industry), I've occasionally started a new game project here and there, but never really gotten very far on them. I'd like to get back into game development, even if it's still only just a side project. I've recently started learning Unity 3D and Blender, but I'll talk about that in a future post. This post actually started off as an introduction to that post, but I got carried away and just decided to make this its own post.