Taito's Space Invaders

Space Invaders is a nicely done remake of Taito's 1978 arcade game coded by James Eibisch in June 1996 as an entry to a retro arcade game QBASIC programming contest organized by Peter Cooper. It plays well, looks identical to the real stuff (although James admits there might be some differences in the scoring system,) and sounds very close to the original arcade cabinet. It's the kind of port that's on par with Phillip Jay Cohen's Pac-Man Classic (I already talked a bit about this one in the MadMix review.)

There's very little fancy coding: the program uses the SoundBlaster FM chip to generate sound and assumes such a card is available; it doesn't check for an environment configuration string nor does it test whether or not a SoundBlaster card is installed before initializing it. It's risky but James claims it can work on computers without such hardware. There's also another interesting thing going on with the controls: the player must use the CTRL and ALT keys to move the tank left and right respectively, and use the SHIFT key to shoot. The thing is, the built-in INKEY$ function doesn't work with special keys like CTRL, ALT and SHIFT. Yet, the game never reads port 0x60 for key presses and there's no use of assembly. So how is it done? Well, simply by PEEKing address 0000:0417, which contains the keyboard flags. This solution is fast, lightweight, and provides solid instant control response. Smart move.

Everything not "fancy" falls under the "efficiency" category. The game works in mode 13 (320x200 and 256 colors) and yet doesn't flicker one bit. Regardless of the computer speed, the game runs smoothly at 60 frames per second thanks to the vertical retrace wait. I didn't expect collisions to be handled by POINTing color indices in video memory, but it makes sense (since shields erosion is pixel-based.) There are some nice variable evaluation shortcuts and a liberal use of the NOT operator (QBASIC programs using this specific operator are few and far between.) Although the source features plenty of routines, the game loop is located in the main module. There's also not a single user-defined type yet the code is very clear. Nice job all around.

Now, there's something else I really wanted to talk about. I collected so many QBASIC games in the past couple of years that I needed to keep them organized in a database to make sure I wouldn't keep duplicates... and then, it happened: the same game, three times, by three different people, each claiming that the Space Invaders port was their own. How come? I've read hundreds of source code and READMEs and quite often, even the most mundane piece of code would have "do not steal" stickers in big bright letters slapped all over them.

I cannot tell if James' port is the game that started the stealing trend (I doubt it,) but for a while, programmers would straight up rip off each other's work, remove all traces of the original coder and pass it as their own. Delightfully devilish, Seymour! It got so bad that programmers refused to release their source code. For instance "Spaced", one of Noah Daleo's last game, is unsourced, with the author explaining in the readme: "Do not ask me for the source code, because I will not give it away to anyone (...) I've seen [all 3] games of mine altered and people take credit for them." The game itself doesn't run in DOSBox for unknown reason and without the source, it'll likely never run again.

At some point, I suspected the two extra copies of Space Invaders were some kind of meme from the early 2000. Picture this: the same game, with the same source code, only the readme file would be slightly altered to remove all references to the previous uploader. It almost sounds like a joke. The game was ripped by Speedy some 6 years after its initial release. 3 years later, Speedy's upload was doctored so Anarky could take credit for it. Did Anarky know where Speedy got his code from? Who knows? In a way, if your port gets ripped off twice within the span of 10 years, you know you did a great job...

I'm providing a slightly different archive containing the original source code, the unaltered README and the binaries so you can run the game without having to fire up QBASIC first. Meanwhile, you can still find the original ZIP file on James Eibisch's website thanks to the wayback machine. Happy space invading!