Having been given the go ahead to start up a tech file on flipcode, I guess in this first entry you will have to put up with my programming life history, and my future plans. :)
The Early Years
I started coding about 10 years ago, when my family got it's first PC. The computer came with a free version of BASIC, which I quickly got the hang of. I made a few very simple games on and off for the next few years. We then upgraded and got a 286 (woohoo!). I then decided that I needed to learn something new, and so after trying out various versions of BASIC, I then experimented with Pascal, Forth and even Ada. However, I realised one important thing about programming even then ... to be good, you should keep up with current trends. Hence, I forced myself to learn C.
The C language is considered to be the serious language of choice for the gaming community today (okay, I here those screams of complaint from the Pascal/Basic coders!). At first C was hard (especially for a 15 year old) but I soon got the basics sorted out. There then came a point where I could code some simple games. Using the a primitive C compiler, I made the BugWorld series of games. These were a 320 x 200 x 256 tiled based adventure series. A total of 100,000 people have since downloaded and played these games world-wide, and I receive tens of e-mails per week about them.
After that, I saw Quake. Coming to university gave me a Janet/T3 connection, so I could play on the net for free with low ping, all day! (There went my chance of a good education :) The game just smacked of genius. A six-degree freedom renderer in real time! But the on-line potential made it a world unto itself. Playing against monsters is one thing, but competing and chatting to your friends all over the country is another. I decided that my own attempts at creating a game were far outdone, but at least they were a start. I needed to rethink my programming strategy. I decided to learn all I could about how Quake was made. I soon discovered that quake was created using the DJGPP compiler, and what's more that this compiler was free! Cool!
I started experimenting with this new compiler, and it is here that my programming habits were forged. I wanted to break into the 3D coding scene, and I took the common route of first writing a Wolfenstein-style raycaster. This went quite well, and even had floors and ceilings. However, with the release of Quake II, I was still way behind the cutting edge coders. I read a lot more, and thought a lot more. Studying math at university really helped. Projection matrices and ray/plane intersection equations were easy, so at least a had something to work with.
I then learnt that all the good games (and all the good computer projects) were made using MSVC (again, shoot me for making such a hideous generalisation), so I decided to get a copy. After quite a bit of saving (students are not rich) I got hold of VC++ 5.0 ... but I found windows programming next to impossible. Coding in windows is not only different from DOS, but it requires a totally different way of thinking. The idea of a message loop totally put me off. However, I got the hang of windows after a while, and was ready to start making a game, especially after much encouragement from my girlfriend.
Having to choose between DirectX and OpenGL, I reasoned that since sound, input etc. was all going to be done using DirectX anyway, then I might as well learn the API properly, and miss out GL all together. Boy, was that a bad choice. The DirectX 5 SDK, was one huge con. The documentation was lame, and the coding was hell. I needed almost a thousand lines of code just to get DirectDraw started and to blit a simple sprite to the screen. However, I decided that I should keep going, no matter how hard this looked.
I haven't released anything for quite a while, and so my hard drive has the usual coders problem of being full of half-completed projects. I am currently using VC++ 6.0, with a AMDK63/500 and an ATI Rage Pro. I am pleased to say that I am almost on the verge of making something reasonable. My current project is a state of the art (I can only dream :) portal engine, named Rumpass. Here is a list of features that I have finished (or am near to finishing)
In the future I would like to add
Here's an early screenshot of the engine ...
This screenshot is made up of four 320 x 200 shots. This shows the engine in it's various rendering states. We have various combinations of Gouraud shading, and anti-aliased texture mapping. The screenshot in the top right corner shows the final result. These rest of my tech files will discuss the various features of my engine as I add them, sharing my thoughts and ideas as I progress.
Thanks for taking the time to read this intro tech file. Please feel free to mail me. A web address for my personal projects will be given with the next update. In the mean time, feel free to mail me with your comments and suggestions.
Have fun coding!