1 | ..... | Introduction to XRacer |
2 | ..... | Building and installing XRacer |
2.1 | ..... | Requirements |
2.2 | ..... | Compiling |
2.3 | ..... | Problems |
2.4 | ..... | Running |
2.5 | ..... | Controls |
2.5.1 | ..... | Joystick |
2.5.2 | ..... | Keyboard |
2.5.3 | ..... | Mouse |
3 | ..... | Submitting patches |
4 | ..... | Help required |
5 | ..... | Creating scenery and tracks |
5.1 | ..... | Overview |
5.2 | ..... | Basic concepts |
5.3 | ..... | Step 1: Make the track model |
5.3.1 | ..... | Tips for making a good track |
5.3.2 | ..... | Tracks which go up and down |
5.3.2.1 | ..... | Linear increments |
5.3.2.2 | ..... | Sine waves |
5.3.3 | ..... | Track shape file reference |
5.4 | ..... | Step 2: Add the scenery |
5.4.1 | ..... | Tips for creating scenery objects |
5.5 | ..... | Step 3: Create the track description file |
5.5.1 | ..... | Basic outline |
5.6 | ..... | Step 4: Create the final XRacer track |
XRacer is a Wipeout clone. At the moment it is incomplete, but I will be working on the following areas over the next few weeks:
I'm looking for people who want to design tracks. I estimate about 10% of the work involved in cloning Wipeout is the game engine and about 90% is track design. See section 5 for more details if you are interested in designing or building tracks.
Distribution license is the GNU General Public License. Please see the file COPYING for details.
For best results, this program requires Linux 2.2, X11, Mesa 3.0, GLUT, libjpeg and a supported 3D accelerator card.
Mesa 3.1 does not work with XRacer.
An analogue joystick is highly recommended. In fact, it is the preferred way of controlling the game.
Periodically, I add patches to support other operating systems, and periodically I break support for other operating systems. However, at time of writing, XRacer is (or has been) compiled on the following platforms:
You should be able to use any OpenGL 1.1 compliant library. I have also compiled XRacer using the Matrox G200 GLX driver.
The GLUT library is commonly distributed in the MesaDemos package. Note that you have to install this package as well as MesaLib to play XRacer.
A 3D accelerator card is really required. It is unlikely that I will ever do a version of XRacer that can be played without 3D acceleration. Sorry.
Type:
./configure && make
If the configure script fails to detect something about your system, then please tell me. The most common problem is that you have glut and a GL library installed, but in a strange place, and the configure script can't find them.
Before mailing me, check that you can get any GL program to compile and run on your system. If you can't do that, then please ask your local guru, or subscribe to a newsgroup such as 3dfx.glide.linux at news.3dfx.com.
If you have an XRacer-specific compilation problem, then ask first on the xracer mailing list. Copy and paste all the compilation messages, not just the ones you think may be relevant.
Set the XRACER_HOME environment variable to whereever you have unpacked the XRacer data files. For example:
export XRACER_HOME=/usr/local/lib/xracer-data
Type:
src/xracer
At the moment, you have to run XRacer from the directory in which it was built like this, otherwise it can't find its data files. This will, of course, be rectified in a later release.
To run in time trial mode (no other players), add the -t option on the command line.
joystick left bank/turn left " right bank/turn right " up pitch nose down " down pitch nose up " button1 fire weapon or use powerup " button2 accelerate
PAGE UP accelerate PAGE DN brake LEFT bank/turn left RIGHT bank/turn right UP nose down DOWN nose up SPACE fire weapon or use powerup s take a screenshot r reset position to beginning of track f display frame rate n invert mouse controls d use mouse to control . increase mouse sensitivity , decrease mouse sensitivity f toggle FPS display ESC quit game
Move the mouse to the centre of the XRacer window and press 'd' to activate it. Move the mouse around to go up, down, left and right.
Patches are most welcome. Please send them to my email address: Richard Jones <rich@annexia.org>.
Please send me UNIFIED DIFFS only! I will ignore other types of patches. The FAQ explains how to create unified diffs.
This section describes how to use a modeller to create tracks and scenery.
Currently, the only supported modeller is AC3D, which is a commercial program. However, I hope to change this in the future, and allow people to use other modellers. I'm particularly interested in Blender, even though it's interface is so baroque that I still haven't worked out how to create even the simplest triangle.
+----+ | \| The track shape file defines | | the overall shape of the | | track. +----+ track.tsf | | v mktrackmodel -v track.tsf | | v +----+ | \| The AC3D modeller input file | | containing just the outline | | of the track. +----+ track.ac | | v AC3D | | v +----+ | \| The AC3D modeller output file | | containing the track, perhaps | | modified, and all scenery objects. +----+ track+scenery.ac | | +----+ | | \| The track description file contains | | | extra information about track and | | | scenery components. | +----+ | | track+scenery.tdf | | | | | v v mktrack -v track+scenery.ac | | v +----+ | \| Resulting XRacer track file. | | | | +----+ track+scenery.trk | | v Load into XRacer.
The diagram above outlines the process of creating a new track. As you can see (if you have a colour browser) there are three tools involved, shown in red. The tools are:
There are five files, shown in blue. The files are:
XRacer divides tracks up into segments. A segment is thin cross-section of track about 10 units wide by 1 unit deep. When drawing the track, XRacer knows what segment the craft is currently in, and draws only a few segments in front of the craft.
In addition to segments, a track consists of a number of scenery objects. Scenery objects are individual pieces of scenery. Like track segments, XRacer is careful only to draw the scenery objects which can be seen from the current segment, and to do this, it stores a list of scenery objects visible from each segment.
Track segments can have associated triggers. A trigger causes some sort of event to happen when a player flys over that track segment. Typical triggers are:
You could draw the track out by hand, but this would be tedious. The mktrackmodel tool allows you to generate a track automatically from a much shorter descriptive file called the track shape file (track.tsf). The track shape file contains a list of track sections, as in this simple example of a short flat oval track:
straight 1000 flat rightcurve pi 500 flat straight 1000 flat rightcurve pi 500 flat
This track consists of four sections (but many more segments): a 1000 unit long straight section, a 180 degree curve, a 1000 unit long back straight and a 180 degree curve back to the start.
Since the start of the track is always at segment 0, it makes sense to split one of the straights as follows to create a more realistic track:
straight 700 flat rightcurve pi 500 flat straight 1000 flat rightcurve pi 500 flat straight 300 flat
If you feed this file into the mktrackmodel program like so:
mktrackmodel -v track.tsf
you will end up with an AC3D modeller file for this simple track called track.ac.
All curve angles are expressed in radians, not degrees. Use the following table to convert from degrees to radians:
degrees radians 0 0 45 pi/4 90 pi/2 135 3.pi/4 180 pi 225 5.pi/4 270 3.pi/2 315 7.pi/4 360 2.pi
Tracks must always join up. In the example above, this is obviously the case, but when you come to construct more complex tracks, you will need to fudge things. First remember that all the angles in the track should add up to 2 * PI (left curves count negative and right curves count positive, or vice versa). If the angles don't add up, you'll need to either add a curved section at the end to make up the difference, or else fudge one of the curves in the track.
Secondly you should look at the track output in the modeller, and increase or decrease segment lengths until the two ends of the track meet (or are very close to meeting). If you get the two ends of the track within a hairs breadth of each other, you can adjust the ends by hand in the modeller.
After creating a track, you should play the track in XRacer and adjust it until you are satisfied that it is correct. Once you start to add scenery to a track, it is impossible to go back and change the track shape. Therefore you must be satisfied that the shape is correct before starting to add scenery. To export the track into XRacer, you should do:
mktrack -v track.ac
and load track.trk.
[Editor's note: This isn't quite the correct procedure yet. At the moment you need to generate an outline track.tdf file as well. In the final game that file will be generated by mktrackmodel for you to edit.]
The tracks shown so far have been flat. To make tracks which go up and down, you need specify something else instead of the flat directive. The possible directives are: sine and linear.
The linear directive specifies that the track height over this section varies linearly with distance. The total distance to gain (positive) or drop (negative) is given as an argument. Hence a simple straight slope which is 400 units long and drops 50 units would be:
straight 400 linear -50
The sine directive specifies that the track height over this section varies as a partial sine wave. For this directive, you specify two angles and a distance.
^ | _-_ |/ \ +-----+-----+-> angle | \ / | pi -_- 2pi 0 Sine wave
The shape of a sine wave is shown above. The peak is at angle pi/2 and the trough at angle 3.pi/2. So, to specify a smooth down-curve, followed by a linear drop, followed by a smooth leveling off, you might do:
straight 200 sine pi/2 3.pi/4 -3 straight 600 linear -50 straight 200 sine 5.pi/4 3.pi/2 -3
file ::= line* line ::= track-type height-function "\n" track-type ::= straight-type | leftcurve-type | rightcurve-type straight-type ::= "straight" length length ::= number leftcurve-type ::= "leftcurve" angle radius rightcurve-type ::= "rightcurve" angle radius radius ::= number height-function ::= "flat" | linear-function | sine-function linear-function ::= "linear" height-gain height-gain ::= number sine-function ::= "sine" start-angle end-angle height-gain start-angle ::= angle end-angle ::= angle angle ::= number | "pi/4" | "pi/2" | &c.
The second step is to load the modeller file into your modeller and add scenery. Before doing this, you should first make a copy of the file, like so:
cp track.ac track+scenery.ac
Only edit and add scenery to the copy of the file, never to the original, which may be overwritten when you do make.
You can now add scenery objects. Please read the following tips closely when you create new scenery objects.
The unit of visibility is a single object. A single object is either displayed or not displayed. Preferably you should create lots of small objects rather than few large objects. There is no penalty for creating lots of smaller objects unless you have to divide a surface or separate several common vertices.
Each object should have a name of the form ``name_number''. The number part is the scenery object number. Number scenery objects serially, starting at zero. In AC3D, you can name an entire object or group of surfaces using the text box in the lower left part of the display. Here are some well-formed object names:
skyscraper_0 start_light_1 tunnel_mouth_2
The unique object number is used when you refer to objects in the track description file (of which more below).
XRacer can only draw convex polygons. In AC3D it is easily possible to create a concave polygon which will not display properly in XRacer. To get round this, call Surface->Triangulate on each concave surface.
XRacer supports two types of animated scenery objects: (1) an object where only the surface texture is animated, or (2) the whole object moves in each frame. Both types of animation are described in section 5.5 below.
NOTE: I'll add some more information about moving track vertices around, and what the different track polys mean, and changing track textures.
The track description file is used to add extra descriptive information about the track which is not contained inside the modeller file.
Examples of such information include:
A track description file normally has a .tdf extension. It consists of three parts (which may come in any order and individual statements may even be interleaved arbitrarily):
The track description consists of a list of segment statements, as in this example:
segment 0 lookahead 50 start segment 1-35 lookahead 50 segment 36-116 lookahead 50 segment 117-153 lookahead 50 segment 154-159 lookahead 50 segment 160-169 lookahead 50 left-powerup right-fast segment 170-235 lookahead 50 segment 236-329 lookahead 50 segment 330-335 lookahead 50 left-faster right-faster segment 336 lookahead 50 left-faster right-faster checkpoint segment 337-339 lookahead 50 left-faster right-faster segment 340-491 lookahead 50 segment 492-518 lookahead 50 segment 519-587 lookahead 50 segment 588-623 lookahead 50 segment 624-629 lookahead 50 segment 630-639 lookahead 50 left-fast right-powerup segment 640-677 lookahead 50 segment 678-721 lookahead 50 segment 722-772 lookahead 50 segment 773-795 lookahead 50
Each segment statement describes either a single segment or a number of segments. For each segment or list of segments, there are a number of possible fields:
segment 630-639 lookahead 50 left-fastis permitted, but:
segment 635-641 lookahead 50 left-fastis forbidden. Because of limitations in the current game engine, the actual trigger point always lies on the segment numbered (n % 10) + 4.
The scenery description section allows you to define visibility of scenery objects from track segments. Normal, non-animated scenery objects look like this:
scenery 3 visible 720-795,0-8
This object, called ``name_3'' in the model, is visible from segments 720 through 795 and segments 0 through 8 only. When the craft is in one of these track segments, the scenery object is drawn. Otherwise it is not drawn.
To do scenery objects with simple animated textures, you would do:
scenery 0 scenery 1 copy 0 texture images/tex2.jpg scenery 2 copy 0 texture images/tex3.jpg animator 3 visible 720-795,0-8 nr-frames 3 frames 0 1 2 ftime 0.5 0.5 0.5
In this case the track only contains a single real scenery object, called ``name_0''. The three objects 1, 2 and 3 are virtual objects created by the mktrack utility (see section 5.6) below.
We assume that the real scenery object has texture images/tex1.jpg. The second line creates a copy of scenery object 0 (called scenery object 1) and changes the texture to images/tex2.jpg. Similarly the third line creates another copy called scenery object 2. Notice that scenery objects 0 - 2 are not visible.
The fourth line creates the animated scenery object, and stipulates that it is visible from segments 720-795 and 0-8. It says that the scenery object contains 3 frames, namely scenery objects 0, 1 and 2, and that each frame is displayed for 0.5 seconds.
To create an animated scenery object where what is animated is more than just a texture, you use a similar principle. In this case, we create three real scenery objects in the actual modeller file. These are the three animated frames in the correct positions. Now only the following lines are required in the track description file:
scenery 0 scenery 1 scenery 2 animator 3 visible 720-795,0-8 nr-frames 3 frames 0 1 2 ftime 0.5 0.5 0.5
Once you have created a scenery file and a track description file, use the mktrack utility to finally create an XRacer track file.
Assuming you have track+scenery.ac and track+scenery.tdf and wish to create track+scenery.trk, you would do:
mktrack -v track+scenery.ac