Year of Knowledge

Every time I sit down to write a new post I am shocked by the dates of my previous posts, time flies. So it’s been almost a year since the last one and it’s time to write down what I’ve achieved since then. (I know I’m probably writing this to myself).

It all started with dissatisfaction with myself, not knowing some essential elements and knowledge that is required for any game developer. The biggest motivation was to be able to create 3D games. Turns out you need Maths for that. It’s embarrassing to admit but I was a bad child in school, and all my years of Game Dev were Math-less. So what did I do? I found Khan Academy and started from scratch, spent 2 months studying, 5 hours a day, going all the way from Pre-algebra, to Trigonometry and Linear Algebra.

It’s amazing how books that looked cryptic before, full of mathematical symbols, suddenly started making sense, kind of like understanding a new language.

This new knowledge felt like godly powers, which escalated into this feel “I must know more!”. I ended up learning how computers work, bit by bit, literally. Basically essential knowledge that any Computer Science student should know. I feel bad about myself when I look at it like that, I should have known this stuff years ago. But what can I do now… better later than never, right?

After I got the essentials, I could finally start learning 3D API’s, my first choice was Java with fixed function pipeline OpenGL, 2.x. Having no idea it’s somewhat outdated. It still gave me a good understanding of how 3D graphics in computers work. After more time of research and study, I settled with C++ and OpenGL 3.2 (worth to mention, C++ is also new to me).

This whole process of learning felt more like a hobby, and I wasn’t getting any richer in terms of money, instead, I was going downhill. It was time to start working on something that could bring some income. Of course doing a 3D game with C++ would be way over my head and probably take 5 times as long because of the practical learning curve. So I’ve decided to work on a small flash game with a friend, at the time called Forest Monster.

While working on the game, I was reading a book on Design Patterns, it was all about how to keep code loosely coupled and always ready for changes that might arise later on. It opened my eyes at how I look at code and design. I decided this was the game to try some “good code” experiments on. The results turned out to be fantastic. The code was much easier to maintain, spread in modular pieces. You could script parameters in without recompiling the game and had GPU accelerated graphics. It also had proper time step that allowed for slow motion and tons more cool stuff. These things might seem minor, especially from the view of the player, because the player doesn’t see how it’s built, so why bother?

Well, it pays off gradually once your project goes on for longer than a month worth of work. (pretty sure you can get away with a poor structure on small games).

By the way here’s a Video of the game. Sadly I have to admit I abandoned it, due to realizing I could spend my time doing more amazing things rather than spending another 2-3 months for a $5k.

This idea of clever structure, modular design and easy to maintain code brought me to obsession about it, I am constantly reading more about it. Two books on the subject I would recommend Game Coding Complete 4th & Game Engine Architecture.

While I’m constantly working and learning, I’ve found procrastination to be a problem just like everyone else. However, I’ve also found it to be productive! For example, when I get bored of game architecture I start doing collision detection, when I get bored of that I do some AI, when I get bored of that I read on game design. It’s a funny but a productive cycle. This reminds me a lot of the days when I was the only one involved in a team of making a game, which went like this: do code -> get bored -> do art -> get bored, and it repeats.

Well, this was my year, I’m happy I can look back at it and proudly say “I’m glad I did that.”