Back in the olden days, in the summer of 1996 to be precise, I was a computer science Master’s student at the University of Karlsruhe, Germany, about to take the oral exam in my specialization area, 3D computer graphics, 3D user interfaces, and geometric modeling. For reasons that are no longer entirely clear to me, I decided then that it would be a good idea to prepare for that exam by developing a 3D rendering engine, a 3D game engine, and a game, all from scratch. What resulted from that effort — which didn’t help my performance in that exam at all, by the way — was “Starglider Pro:”
In the mid to late 80s, one of my favorite games on my beloved Atari ST was the original Starglider, developed by Jez San for Rainbird Software. I finally replaced that ST with a series of PCs in 1993, first running DOS, and later OS/2 Warp, and therefore needed something to scratch that Starglider itch.
In brief, Starglider (and my rip-off) are 3D arcade action games in which the player flies an aircraft over the surface of a planet, trying to stop an alien invasion by shooting as many enemy units as possible while surviving as long as possible. Starglider had a very intuitive mouse/keyboard control scheme, which I tried to reproduce exactly, and really good design and graphics and amazing sound for the time and the capabilities of the ST platform, which my rip-off did not manage to replicate at all.
Nevertheless, I did get to turn this project into a complete game before taking my exam, and some time later, in January 1998, published it on my web site — where I promptly forgot about it for the next 20 years. Cue yesterday, and an out-of-the-blue email from a self-proclaimed “retro gamer” who had somehow found mention of my little game, but was unable to find the actual binaries due to, well, bit rot, and I was reminded. The original zip file still existed in my web site’s attic, and, to my complete surprise, the game still works perfectly inside dosbox under Linux, high-resolution (1152×864) 256-color graphics and 16-bit PCM sound and all.
When I said “from scratch” above, I wasn’t joking. I started by writing a linear algebra library using fixed-point arithmetic to make the program run on 386 CPUs without a floating-point unit, with the low-level bit-shifty parts written in 386 assembly language embedded in C++ code. The second component was a 2D graphics library using direct VESA 2.0 framebuffer access in 32-bit protected-mode linear addressing, also mostly in C++-embedded assembly. The third foundational component, a real-time multi-source sound mixer optimized for Sound Blaster audio cards, was the only component that I had lying around from an earlier study project.
On top of this foundation came a low-level 3D transformation and rasterisation library for unlit flat-shaded triangles using grid- and BSP-tree-ordered drawing and Painter’s algorithm for hidden-surface removal, a fast collision-detection method based on octrees of spheres, and finally an object-oriented game engine with evolving state-machine-based enemy behavior (“Artificial Stupidity™” as I called it back then, as enemies were notoriously unconcerned about crashing into buildings and each other).
I think the software framework I developed wasn’t all that shabby, albeit mostly unoptimized due to time constraints, but the amateurishness of the effort really shows in the 3D models. I blame two things: my complete lack of 3D modeling talent, and my complete lack of 3D modeling tools. I designed all 3D objects using pencil and paper, and entered them as text files of vertex coordinates and polygon vertex indices, and it shows.
I have no idea how many times Starglider Pro was downloaded from my web site, but I know it happened at least once: about a month after releasing it, I received an email from Jez San himself. At first I panicked that it might be a cease & desist order, given my game’s highly dodgy intellectual property status, but it turns out Mr. San took my effort and its tongue-in-cheek name in the spirit intended, and basically said “nice job.” Bullet dodged.
I started working on a second version of Starglider Pro, with improved graphics optionally using texture mapping and the then-popular Voodoo Glide API, between my graduation from University of Karlsruhe and my entrance into UC Davis’s PhD program, but the time commitments of being a first-year PhD student killed that right quick. Nonetheless, the network infrastructure I developed to enable multiplayer Starglider Pro became the basis for Vrui’s tele-collaboration infrastructure much later.