flipCode - Tech File - Kais Dukes [an error occurred while processing this directive]
Kais Dukes
Click the name for some bio info

E-Mail: kais.dukes@ic.ac.uk

   03/03/2000, Take Off

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.

The Present

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)
  • 6DOF texture mapped, Gouraud shaded polygons
  • Portal engine, using hardware Z-Buffer
  • Dynamic and colored lights
  • Quake-style console
  • Hardware acceleration through Direct3D
  • A stand-alone windows map editor
  • Full Quake MD2 model support
  • Powerful ASCII text file map format
  • In the future I would like to add
  • Larger data sets (i.e. bigger test levels)
  • Object collision
  • Curved surfaces
  • Multitexuring (and hence lightmaps)
  • A working game, and not just an engine
  • 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!
    Kais Dukes.

  • 03/03/2000 - Take Off

  • This document may not be reproduced in any way without explicit permission from the author and flipCode. All Rights Reserved. Best viewed at a high resolution. The views expressed in this document are the views of the author and NOT neccesarily of anyone else associated with flipCode.

    [an error occurred while processing this directive]