A brief history of the world’s smallest first-person shooter
Big things do come in small packages.
2004 was a huge year for games in the first-person shooter genre, with a category-defining lineup including the likes of Half-Life 2, Halo 2, Far Cry, Killzone, Counter-Strike: Source, Unreal Tournament, and Doom 3. (Activision’s Call of Duty debuted the year prior.)
But in such a big year, one game stood out by going small.
The compact FPS .kkrieger sprang from the demoscene, a community of coders who specialize in making digital art projects within strict technical limits. In 2004, a subdivision of the German demogroup Farbrausch called .theprodukkt managed to cram a playable, 3D shooter with multiple weapons and enemy types into nothing more than a 96-kilobyte executable.
The members of .theprodukkt were no strangers to the demoscene in the early 2000s, having already gained some notoriety designing some 64 KB programs. But they didn’t crack the interactive element until Breakpoint ’04, a massive demoscene gathering that featured competitions. The 96 KB game challenge spurred the team to finish .kkrieger, which they had been working on in concept since 2001.
So how did .theprodukkt make a whole FPS in a file size smaller than a JPEG?
The team relied heavily on procedural generation of textures and assets via a bespoke tool called .werkkzeug3. This tool takes very simple patterns, Windows libraries, and even fonts and applies routines that add effects like blur, noise and distortion to create surprisingly detailed textures. These textures are rendered in real time when the game starts up rather than stored as pre-rendered assets, keeping the overall file size low.
Similar methods are used to create the 3D meshes for those textures. Routines that take simple shapes (primitives) like cubes and cylinders and shape them into models run when the game loads.
Because everything from the textures to the models to the MIDI music is procedurally generated instead of stored, .kkrieger inflates to take up about 300 megabytes of memory when it runs, and it took a fairly impressive rig (by 2004 standards) to play, despite its tiny file size. The game also got more out of its diminutive disk space by passing off coding duties to Microsoft’s DirectX multimedia software for things like lighting.
Finally, aside from managing assets, .theprodukkt had to reduce the size of its C++ code by trimming any redundancy or unused lines, and using a house-developed compressor utility called kkrunchy to get the file size down from 120 KB to a functional if slightly buggy 96 KB.
While it doesn’t offer the same depth of gameplay as its contemporaries and only clocks in at about 10 minutes, .kkrieger is worth remembering as an achievement in creative coding. The demoscene itself has been recognized by UNESCO as part of the cultural heritage of multiple countries, most recently the Netherlands in July—no small feat.
Evan Lewis is a contributing writer.