An OpenGL based Atari Asteroids clone using Fonts as Asteroids where a spaceship with inertial
control has to be maneuvered through an “asteroid field” consisting of words
of web pages.



[ (17M)]

Note: This is an experimental version/rewrite into OpenGL from the original 3Dfx Voodoo2K version that used a custom Mesa library.



[ This is FAST – FontAsteroids ]


[ 1. ] [ Introduction ]
[ 2. ] [ Version history ]
[ 3. ] [ System Requirements ]
[ 4. ] [ Software Requirements ]
[ 5. ] [ Installation and Control ]
[ 6. ] [ Comments on the Coding Style ]
[ 7. ] [ Planned Future Additions and Addons ]
[ 8. ] [ Web Links ]
[ 1. ]

[ Introduction ]

Based on the original Asteroids game console, a spaceship with inertial
control has to be maneuvered through an “asteroid field” consisting of words
of a web page. During the game the player fragments the already mangled page
content from sentences to words, from words to characters, and characters to

Effectively, this game is the game with the most levels in the world – every
webpage could be played as a level … and there are millions of URLs.

The game was first presented to the public during the net_condition
Exhibition Sept. 1999 at the ZKM, Karlsruhe, Germany ( This is
also the reason why there are many german URLs included in the list. For
completeness, the exhibition webpage texts from the 22/9/99 are included.
See file LICENSE for copyright information.

Have fun with the game!
[ 2. ]

[ Version history ]

Ver 1.0 – Sun Sep 19 16:52:02 CEST 1999
* Initial release

Ver 1.1 – Fri Sep 24 12:27:14 CEST 1999
* Removed yiff in favour of my own libgaudio system.
* Changed web parsing script to load only html files.
* Added “supershot”.
* Fixed up keyboard controls
* Rewrote this README

Ver 1.2 – Mon Sep 27 15:38:09 CEST 1999
* Cleaned up fast.C
* Added analog joystick driver
* Updated README and Makefile
[ 3. ]

[ System Requirements ]

* Fast machine (>P2-333)
* Voodoo2 OR Voodoo3 graphics card (see comments below)
* Soundcard with joystick port
* Analog Joystick OR Logitech WingMan Gamepad (see comments below)


– The game was developed (and runs well) with a Voodoo2 card and is running in
the exhibition even better with a Voodoo3-3000 card. Nonetheless, Voodoo
cards are not really required, since the game is using OpenGL as basis. At
the time of this writing (09/99) there is are two other options to get the
game to run on a Linux-PC: the Matrox G200 OpenGL drivers and the Nvidia
RivaTNT/2 OpenGL drivers. To enable these, edit the Makefile to set
the new GL libraries and their locations. In the source code, the screen
refresh frequency will have to be set manually.
The Makefile option -DVOODOO2 will set a 800×600 resolution at 75Hz.
The Makefile option -DVOODOO3 will set a 1024×768 resolution at 85Hz.
You must use one.

– The game has fallbacks for keyboard control. These are two slow for proper
gameplay, as keydown and keyup events are processed in the event handlers
but not provided the way I need them by glut.
Your best bet to add support for your game controller, is to rewrite the
readJoystick() routine in fast.C for your input device. If you manage to
do so, please send me the code to be included in future versions of FAST.
The Makefile option -DLOGITECH_WINGMAN will enable the logitech gamepad.
The Makefile option -JOYSTICK_ANALOG will enable the analog jostick.
You must use one.

– To get the wingman working properly with my Soundblaster PCI64 card, I had
to work with the following procedure. Edit the kernel es1371.c file such as to
always enable the joystick port even when compiled as module.
Add these lines:
#define CONFIG_SOUND_ES1371_GAMEPORT 0x200
Then edit the joy-logitech.c modules to reflect the nonstandard joystick
port. Edit this line to what is shown:
static int js_lt_port_list[] __initdata = {0x200, 0 };
Load all the modules manually.

– To get the analog joystick working properly, it is recommended to get the
joystick 1.2.x package and set up a calibration file. Compile “jscal” and
then run the sequence:
jscal -c /dev/js0
jscal -p /dev/js0 > /etc/
And add a line to your rc script (i.e. /etc/rc.d/rc.local) executing that file
source /etc/
[ 4. ]

[ Software Requirements ]

* Linux 2.2.x, glibc 2.x (i.e. Mandrake Linux 6.x)
* Joystick driver modules (part of kernel)
* Glide 3Dfx library installed (see comments)
* Mesa openGL library installed (i.e. Mesa-3.1b2)
* freetype TTF rendering library installed
* gltt OpenGL-TTF library installed
* wget installed (see comments)
* libgaudio library (included with glfast)


– Linux 2.2.x, glibc2.x is recommended, since the program uses pthreads

– Glide might not be required if a different GL library is beeing used. See
the section “System Requirements”.

– Mesa is aften already installed, but compiled without Glide support. To
install Mesa with Glide support, remove existing libraries, get, recompile
and install Mesa from the source code.

– freetype and wget is often already installed on current systems.

– gltt can be downloaded. Compilation is a simple “./configure; make; make
install” sequence. Make sure you add “/usr/local/lib” to “/etc/”.

– libgaudio is included, but is to be considered a seperate package with
its own production and update cycle.
[ 5. ]

[ Installation and Control ]

* Compile libgaudio:
cd libgaudio-1.0; make; cd ..
* Edit Makefile and set your graphics card and input device
* Compile program in fast directory:
* If desired, update webpage files with scripts in webpages directory:
cd webpages
cd ..
This might take a long time. Change pages to be loaded in the “url-list” file.
* Make sure sound and joystick driver modules are loaded.
* Start the game and blast away:

If enabled, the game tries to open a network connection to another program
that is only useful in the exhibition context (asciireflector).
This will fail (unless an asciireflector is running at the specified section)
but this doesn’t affect the game in any way.

The keyboard commands are as follows:
ESC    – start the game on title, exit the game otherwise
SPACE    – fire shot
x    – fire supershot
s    – start
UP    – thrust
DOWN    – shield
LEFT    – rotate left
RIGHT    – rotate right

The analog joystick commands are as follows:
UP    – thrust, select up
DOWN    – shield, select down
LEFT    – rotate left
RIGHT    – rotate right
Button1    – fire shot, start
Button2    – fire supershot

The Logitech wingman commands are as follows:
Gamepad – rotate left/right, select up/down
Start    – start
Trigger – fire shot
ButtonA    – shield + thrust
ButtonB – thrust
ButtonC    – shield
ButtonY    – fire supershot

[ 6. ]

[ Comments on the Coding Style ]

As you might have noticed, the source code is all in one big file, C-style
inside, C++ outside (for GLTT) and with lots of hardcoded variables. Most of
you will start to shudder and shout. Well, this is how I program and you
have to live with that. 🙂 But hey, as long as it works its OK, right!
In retrospect, this is how the computer industry worked for much of the 70s,
80s and into the 90s when binary was king – and then it was binary ONLY – we
survived that too!
[ 7. ]

[ Planned Future Additions and Addons ]

– SpaceMiner mode where one can traktor-beam words around.
– More input modes: Unix man pages, local filesystems, local files …
– Live webpage loading and user URL entry.
– Multiplayer modes using a public asciireflector as server.
– More special weapons, more fragments, more sound-effects.
[ 8. ]

[ Web links ] (Links from 09/99)

* See for ESC_to_Begin details.
* See for the ZKM main page and net_condition exhibition
* See for Linux specific info on 3D hardware and the
3Dfx drivers.
* See for info on the MesaGL library.
* See for info on the GLTT
* See for info on the freetype library
* See for info on the
Linux joystick driver.

Tagged on:             

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.