Path of a Polymath Programmer Part 6

I’ve covered a number of topics that have little to do with programming, yet contributed significantly to my programming skills. Here’s a recap of everything so far:

So I’ve been playing console games, interested in pencil-and-paper role playing games and I’m proficient in programming. Is it any surprise that I’d be interested in game development? And that’s what happened.

I browsed through GameDev.net for comprehensive game development guide material. Then I went to NeHe for all the OpenGL tutorials you’ll ever need. I also read up on independent game development on MadMonkey, and browsed GameTunnel for a feel of the games out there.

Since I’m going to be developing games on my own, I’d say I’m an independent game developer, as opposed to the professional game studios such as Square Enix (previously Square). As a hobbyist programmer, I was just looking to create games for fun. At that time, I was interested in creating role playing games similar to Final Fantasy. Researching on game development, I found I had a lot to learn.

There’s the design process, ranging from story plots and characters to weapon and battle system to resource management. There’s graphics to be rendered, and music to be composed. There’s a whole slew of stuff to be done, and all of them had very little to do with programming.

Well, I’ve got to start somewhere, so I began with what I could see, the characters and game world on the screen. I tested the recommended ways on rendering 2D character sprites and how to animate and move them. I wrote small test programs to try out rendering game world data, and camera movement. Luckily I went through a class on 3D graphics, so I could understand terms such as orthogonal/isometric view, point of view (POV) and field of view (FOV).

Then there’s menus. Battle menus. Item selection menus. “New game” or “Load game and continue” menus. I was hovering between using linked lists and simple arrays for storage.

Then there’s resource management. How do I store saved game data? I learned to write data to text files, and read them back and load them onto program variables.

I downloaded and printed tons of research material. I learned the file formats for the Windows bitmap file and music files of the .it (Impulse Tracker), .s3m (ScreamTracker) and .xm (Fast Tracker) file formats.

I learned the basics of design documents and why they’re important. I learned to see the overall view of a game development, which is essential a piece of software. This turned out to be useful in my career.

For a long time, I stuck with it, researching and testing and researching some more. And I still didn’t have anything playable to show for it. I was frustrated and my patience was waning. The only thing holding on was my passion for games, and even that was slowly draining away.

So I did the only thing that made sense. I let go.

Once I freed myself from the obsession that I must create something, I found the whole process more enjoyable. And I didn’t do game development anymore, at least not in the regular sense. I also went back to playing games more, and I started to really appreciate the effort that went into those games.

I still like reading up on game development stuff. I did all that stuff on C, C++, OpenGL and a bit of DirectX (this was where I got that Windows template used in my dissertation in part 5). It was tough because there’s a lot of plumbing that needs to be done. Now there’s pixel shading, anistropic filter and much better graphics cards. Now there’s C# and XNA Game Studio Express from Microsoft. Aha! Useful tools taking out a lot of the mundane and bringing back more of the fun. Maybe I’ll try my hand at creating something again…

The next obsession

Well, game development took too much out of me. But I continued to browse the game development web sites. Then I came upon a site where the author listed some of his favourite applications, games or otherwise. And that’s where I met “The Product“.

“The Product” is a demo. It is an application that runs for about 11 minutes, showcasing 3D scenes, special effects and accompanied with synchronised music. It is also 64 kilobytes in size.

That was astonishing! After my studies of game development, I realised that lots of game data was used. Even console games require memory cards to store saved game data. Then came along one small piece of software that creates an amazing visual and auditory experience. That just blew my mind away. Absolutely cool.

Creating demos is part of a culture called the demoscene. It had a rather unsavoury historic start, because it began as attempts to hack into programs and load some of the hacker’s taunts into that program. It was used to demonstrate the superiority of the hacker’s programming skills. The hack had to be small in size, and tons of creativity went into making the hacks as memorable (and insulting) as possible.

Well, the demoscene has evolved into something else. Something more artistic in nature. To learn more about the scene (as it’s called), I suggest actually downloading the demos and have a look. You can try these 5 amazing demos first. Then go to scene.org and pouet.net for more information.

Anyway, where was I? Oh yes, the product. I wanted to find out how it was done. All the textures. All the music. All the 3D scenes rendered. How were they stored?

It turns out that the demogroup who created it, wrote generic functions for generating textures, music and 3D models, right in the application. Like a class library of sorts. Then in the application, only the function calls are stored. And that’s how all that data was stored in just 64 kilobytes. You don’t store the data. You store the instructions for creating the data. Brilliant.

After watching the product, I wanted to watch more. I downloaded lots of other demos and watched them, over and over again. The special effects were generally better than the games I played. The music were generally of high quality, some mesmerising and some blood-pumpingly intense.

And then I wanted to create a demo of my own. Ha! Man it was tough. I started researching again. I found that there’s an electronic magazine about the demoscene called Hugi. It’s basically an application that runs and lets you browse through articles in an interactive manner, with music playing in the background. These people are so awesome…

With much passion and enthusiasm, I actually finished a demo. It’s called “Trying To Fly”. It’s about this wooden cuckoo bird wanting to escape into the bigger world, trying all sorts of methods to actually fly. Well, it never took off, pun not intended. BUT, I did learn the process of switching scenes, animation of 3D models and particle effects. Yeah, I wrote a custom particle system just for the demo. It’s actually kind of cool, and I think I’ll talk about it in another post.

Continue to part 7