Inspiration

Wipeout HD’s Zone Mode sure is pretty. Look at it. Man, that’s some great stuff. And you know what makes it prettier?

The fact that it’s flying by at stupid-fast miles an hour.

Unfortunately, Wipeout HD’s only for PlayStation 3, and it wouldn’t exactly be right to say everyone had one. We sure don’t. But then again, you shouldn’t really need the latest, greatest, newfangled-est hardware to play a good racing game. All you should need are some good reflexes and something that’ll get out of your way and let you go fast.

We already had the reflexes, so it was just a matter of making something to let us go fast. So we made Go Fast.

We think it’s a pretty great game, so we’re sharing it with the world- now you can Go Fast, too!

Features

Technologies

Catmull-Rom Splines
Each of the randomly generated tracks in Go Fast is actually a transformation of a Catmull-Rom spline. While the initial setup (and debugging) of the spline code added some extra work and pain, it helped make collision-testing easier. Collision-testing was simpler because we didn't have to check any of the ships' positions against all of the polygons in our world; instead, we computed the ships' positions on the track, computed the track boundaries at that position, and compared a few vertices against each other. If we had made our track without the splines, we would have had to use a space partitioning data structure to make collision-testing feasible.
Fragment Shaded Radial Blur
Go Fast uses a radial blur effect to make the player feel like they're really going fast. The blur effect itself is derived from NeHe Productions' OpenGL Less 36. However, instead of rendering the effect to a texture and then overlaying the texture on the current screen as in the tutorial, we translated the code into a fragment shader for better performance. Due to differences in our team's hardware, our shader is written in a shader assembly language, which we compile into a shader program and use at runtime.
Collision Detection
Go Fast handles collisions using axis-aligned bounding boxes. Since the track boundaries are simply planes, we do a plane intersection test between the track wall and a given ship's bounding box to determine whether the ship is colliding with the wall. Similarly, we check if any of the ships' bounding boxes are intersecting to determine whether the ships are colliding with each other.
Threading
To help Go Fast feel a little faster, we implemented threading to load ships and generate the track while the player was at a screen where he or she could make a decision. (At the initial menu screen, a thread is spawned to load all of the racers while the player decides which type of race they want, and at the racer selection screen, another thread is spawned to randomly generate a new track and city while the player chooses their racer.)
Texturing
Go Fast uses SDL_image to help load images, since it supports a large number of file formats. (Images were rendered onto SDL_Surfaces, which were then converted into textures.) Using SDL_image allowed us to focus more on creating great images to use in the game instead of spending time figuring out how to load those images.
Fonts
We used SDL_ttf in Go Fast to help load fonts. From there, we drew every character in the font to an SDL_Surface and used the SDL_surface to generate a texture for each character. We rendered the character textures to screen when we needed to draw a string.
Audio
Go Fast uses the SDL_mixer library to handle audio playback. SDL_mixer manages multiple channels of audio for us, so we can have music playing behind the sounds of engines boosting and ships colliding.

Videos

Requirements

Go Fast needs:

Go Fast uses cmake to help make building hurt less. You don’t really need it, though.

Get It

Check out our project’s Subversion repository at Assembla.

Developers

Go Fast was lovingly created from insomnia and caffeine by:

Go Fast uses models, textures, and music from Wipeout Pulse. All of that fancy business is © Sony Studio Liverpool. (We don’t know where they came from. They all just sort of found their way into our repository.)

Everything else we made ourselves. By hand. From our own blood. (Except maybe that last part. Maybe.)