I recently came across several old projects I did almost 20 years ago, and thought about how to preserve them so they aren’t lost again. I already believed them to be lost once, until a classmate approached me and told me what he had found on some of the old floppy disks he had lying around.
And what better place is there to conserve things than the internet?
Back to the year 1995.
For the uninitiated, this means going back to a time where you would initialize so-called Mode 13h by doing:
mov ax, 13h
I guess I will never forget those two lines of assembler code.
Then you would setup a palette, get a pointer to memory address 0xA000, and color each of the 320×200 available pixels at your own leisure by writing single bytes to the correct memory address. Back then, you didn’t need more than 200 lines of D3D or OGL setup code just to get something on screen. You would set all individual pixels manually, without the help of any APIs or GPUs.
All the stuff I did back then was done in Turbo Pascal (Borland Pascal 7.0 to be exact), with a lot of assembler code for setting up color palettes, graphics modes, and for 3d programming. I started programming in BASIC on the C64, and didn’t use C/C++ before attending university.
Note that all demos were captured using DOSBox and converted into animated GIFs using some freeware tool. You might not see it, but all the applications ran very smoothly on my father’s 386 DX with 33 MHz back then. Unfortunately, I couldn’t persuade the tool into generating proper 60Hz GIFs, but at least it’s better than nothing.
Among the first things I made were some small games that didn’t need much logic, but rather were used as a playground for trying out graphical tricks & techniques, like the following:
The objective is simple: paint the whole screen without touching any of the enemy balls. That’s it. Apart from that, the game had a simple highscore system, and the graphics were done by yours truly in good old Deluxe Paint 2. I wonder if anybody still remembers that – fantastic piece of software at that time.
I later started cloning some of the more popular effects known from the demoscene, like plasma, copper bars, and others. Unfortunately, DOSBox is not able to reproduce those effects correctly, hence no animated GIFs.
In addition to that game I also worked on several others, but none of them were ever finished. Most of them are too small and unfinished and not worthy of being shown on the internet ;).
Foray into 3D
About a year later, in 1996, I started writing my first 3d applications. I began with displaying simple wireframe models using Bresenham’s line drawing algorithm, and then moved on to solidly filled opaque and transparent objects. I also combined the 3d rendering with some earlier 2d effects like the well-known fire, as shown below:
Transparent glass cube
A burning prism
Burning wireframe objects!
Texture mapping was added later on:
Affine texture mapping in action
If you watch closely, you can see that the texture mapping only supported affine (non-perspective correct) mapping. I remember coming across an article about perspective-correct texture mapping by Chris Hecker in the Game Developers Magazine at a later time, which allowed me to do perspective-correct interpolation every 16 pixels, with affine interpolation in-between. I think something similar was also done in Quake for performance reasons, if I remember correctly. Back then, doing perspective-correct interpolation was quite costly, because it required at least one division per pixel, and divisions were really slow.
Being impressed by the likes of Castle Wolfenstein, Doom and Duke Nukem 3d, I started working on simple 3d levels later on:
Solid, single-colored walls
In the end, the demo also supported arbitrarily scaled billboard sprites:
I also remember adding bilinear interpolation to the texture mapping algorithm, but that application seems to be lost forever, unfortunately. I can’t remember if I ever did proper texture-mapped floors and ceilings to be honest.
Back to 2d
Later that year, I started working on my biggest project: a clone of “Die Dunkle Dimension”, a well-known german RPG for the Commodore C64, which itself was a clone of one of the Ultima games:
The game had a huge 2d map, visibility checks for trees and mountains, an inventory system, a dialog system, etc. You could enter buildings, talk to people, get and equip items, attack monsters, get experience points, level up, build your own character. The most crucial thing not working was the enemy AI, which was just too hard for me to grasp at that time.
Still, it’s something I’m very fond and proud of. I sometimes even think about finally completing that game, giving it a complete facelift using new technology.
I’m pretty sure there are a few other things I could have shown in this post, but I either forgot about them, or they are lost on some old floppy disk, nowhere to be found. Nevertheless, I still have a few of my first C/C++ projects lying around, which I could post if there is interest.
So, what did you do 20 years ago? Share your story!