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!
Btw, the creator of DDD provides a free download of the game. I’ve replayed it on an emulator a few years ago, it’s still great!
Here’s the link to the downloads:
Thanks, I didn’t know there would be others that know and love DDD the way I do :).
I also replayed DDD in an emulator a few years ago, only to write down all the possible dialogues for each and every character in the game. I’m pretty sure I still have that file lying around…
Btw, replaying the game in an emulator was the first time I actually managed to complete it. Without cheating your attributes, those stone golems and phantoms at the very end were just too tough in the original C64 version.
It’s all very interesting, but … where the hell are posts about engine architecture? :)))
Give it time :).
I’m currently working for another developer, hence time is a bit limited. I will try putting up new posts though!
20 years ago… Let me think… I was -7 months old if I recall correctly. 🙂
Your blog is awesome, by the way.
Yeah – those were the days…
I still remember copying all the possible sprites from Sensible Soccer by hand – pixel by pixel 🙂
Sadly, almost all of my old source code is lost forever due to a harddisk crash… backups? Hah – it was 1990… 🙂
I started with QBasic on an IBM XT with 8 MHz 🙂
Later on, I did most of my programming on a 386 SX Notebook with 33 MHz and owesome looking 256 shades of gray on a 9″ screen. A lot better than the Hercules monochrome card of my XT…
I also used TP 7.0 for many years until I switched to C++.
No internet was around – no googling for solutions…maybe some tricks from a PC Magazine and some boring programming language books – that’s all you had at that time…
Among my greatest pieces are
*) a Sensible Soccer clone
*) a penalty shooting simulator
*) a vector-graphics painting program
*) a VGA window manager framework for MSDOS
Oh man – I feel old now 🙂 But thanks for the trip back in time, Stefan! And keep up the good work!
And of course post your first C/C++ projects, please! 🙂
Very interesting! I’d be very happy to see other old projects. 20 years ago I was a very young kid… My interest in games programming would several years later, where I started by doing a clone of Pong (with obstacles which the ball could collide with) and a simple 2d space war game in Darkbasic.
it’s almost my biography ) nice blog, btw