Carmageddon TDR 2000 Modding Tutorials

Making A Basic Car For TDR 2000

Author: David Biggs

This tutorial will show how to make the most basic of cars for TDR2000. For anything more complicated refer to the complete TDR2000 SDK Car documentation. This tutorial won't show you how to use 3DSMax, it will only show what is needed to create a car hierarchy and export the car into the game. General knowledge of 3DSMax is assumed and required.

World Coordinates:

The 3DSMax Coordinate system differs from SoftImage (which was used to develop TDR2000). All cars developed in 3DSMax must be constructed so that the Y Axis points upwards, the Z Axis points Forwards and the X axis points to the car drivers left. The units in 3DSMax convert to 1 unit = 1 meter in the game. Your average car is around 1.7 meters wide, 1.5 meters high and around 3 meters long.

STEP 0: Before you start

Copy the TorusMaxExporter.dle file from the SDK Tools folder into your 3DSMax\Plugins folder and start up 3DSMax.

STEP 1: Make a basic car

Create a car with the approximate center of mass at the world origin. For the example car I have used a simplified version of the Limey. Name the main car mesh chassis. The textures applied to the Car should be .TGA's and for this tutorial are named FRED.TGA and FRED_damaged.TGA. Assign FRED.tga to the chassis:
3DSMax Screenshot: a basic car

Create just 1 wheel and place it at the world origin. Name the wheel wheel_master. Assign FRED_damaged.TGA to the wheel. When the wheel is rendered ingame it will use the proper FRED.TGA texture until it is damaged. The Damaged texture must be applied to an object in the hierarchy so that it is exported to the car PAK file by the plugin.
3DSMax Screenshot: wheel placed at the origin

STEP 2: Create the Car Collision mesh

The Collision mesh should be very low poly and be as close to the shell shade of the car as possible. Name the collision mesh data_chassis.
3DSMax Screenshot: the collision mesh

STEP 3: Create the Hierarchy

  1. Create 2 dummy nulls (dummies) at the world origin.
  2. Name one dummy MAIN_NULL and the other ViewFX and parent the ViewFX null to the MAIN_NULL.
  3. Parent the wheel_master to the MAIN_NULL.
  4. Parent the data_chassis and the chassis to the ViewFX null.
  5. Create 4 dummy nulls and move them to the wheel positions of the car.
  6. Name the 4 nulls inst_FR, inst_FL, inst_RR and inst_RL for the front right wheel, front left wheel, etc.
  7. These nulls represent an instance of the master wheel.
  8. Parent the wheel instance nulls to the MAIN_NULL.

You should now have a schematic view that looks like this (it's best to uncheck all the SHOW options in the schematic view setup so only the main objects are displayed):
3DSMax Hierarchy

And the scene with the wheel nulls should look something like this:
3DSMax Screenshot: a basic car

STEP 4: Userdata

Because this car is so basic, only 2 pieces of userdata are required.

The car collision mesh

Open the properties box for the data_chassis collision mesh and paste in the following in the user defined section:

// Car Collision Data userdata
// Remember that all numbers are floats and need the decimal point
// Mass (kg)
// xAxis inertial length
// yAxis inertial length
// zAxis inertial length
// Bodies coefficient of restitution
// Center of mass

The chassis mesh

Open the properties box for the chassis mesh and paste in the following in the user defined section:

// Deform with no detachment
// Softness
	F 0.5
// Crush type (unused, get rid of it)
	I 0
// Ease of detachment 
	F 0.5
// Current damage
	F 0.0
// Texture damage level 1 texture pointer
	I 0
// Texture damage level 2 texture pointer
	I 0
// Threshhold for level 2
	F 0.2
// Damage level 1 texture (undamaged)
// Damage level 2 texture
	S "FRED_Damaged"

All the 3DSMax editing is complete. Now we just need to export the car and setup a few descriptor files to get the car running in game.

STEP 5: Exporting the Car

The TorusMaxExporter plug-in can be activated in one of two ways. Either by selecting Export... or Export Selected... from the File menu. It is recommended that you use the Export Selected method.

Create a Directory for your new car under the TDR2000/Assets/Cars Folder. In this case we'll call the car FRED so we create a new folder called FRED.

Select the MAIN_NULL of the car hierarchy and go to File->ExportSelected. Navigate to your TDR2000/Assets/Cars/FRED Folder and save the car as fred.pak. Make sure you alter the export filetype to a TDR2000 PAK.

The Exporter Dialogue box will appear. Just click OK and the car will be exported.

STEP 6: Setting up the car descriptors.

There are several files that need to be altered to enable your car to be selected in game.

6A: Car_Descriptor.txt

Firstly edit TDR2000\Assets\Cars\Car_Descriptor.txt.
This file describes the basic properties of the cars and tells the game what descriptor file the car uses. Goto the very end of the file and add the following lines:

	DESCRIPTOR "FREDdescriptor.txt"
	COST 1000         
	TYPE 2                

If you look at other cars in the file you will see what each setting effects.
They are basically as follows:

  • STRENGTH : How strong the car.
  • COST : Cost of the car in thousands of credits.
  • TYPE : Eagle, Novelty or standard car.
  • DRIVER_TYPE : Male or female normal, gang or cop driver, this only effects sound effects.
  • Now save and close this file.

    6B: Car_Strings_UKzombie.txt

    Next edit TDR2000\Assets\Strings\UK\Car_Strings_UKzombie.txt.
    Add the following lines to the END of the file. This file must have cars in the same order as car_descriptor.txt. The information in this file is used for displaying in the game. It doesn't affect the car handling at all.

    		 "Top Speed: 200mph
    		Kerb weight: 1.6 tons
    		0-60mph: 8.5 seconds
    		Fred rocks your socks"

    Save and close this file.

    6C: FREDdescriptor.txt, FRED_texturedescriptor.txt and FRED_deform_Bits.txt

    The easiest way to create the car descriptor files is to copy files from another car and rename them. Included in the TDR2000SDK/Examples folder is the descriptor files from the Limey car. Copy these files into the FRED folder and rename the Limey part to FRED.

    You should have

    Edit the FREDDescriptor.txt

    Do a Search and replace and replace Limey for FRED. This will fix most of the text file differences. Some sections will still need altering.

    Alter the hierarchy filenames so they are as follows:

    // Hierarchy filename
    //  Hierarchy filename

    Because this car is extremely basic we don't have any doors, or brakelights etc. Several section of the descriptor need to be removed.

    Alter the brakelights, doors and Bonnets section of the descriptor so it reads as follows:

    // Number of Brake lights
    // Number of Doors (pivot nodes)
    // Number of bonnets (pivot nodes) (this includes the front bonnet and the hatch at the back)

    Also alter the Fire and smoke nulls section to read 0:

    // Engine fire and smoke nulls (0 to 4), the first one is the engine, the others are extras for wasted

    For each of the 4 car wheels, the wheel master must be altered because the Limey has different wheels for front and back. Edit the Centered Hierarchy Node section for each wheel to read:

    // Centered hierarchy node

    Edit the FRED_texturedescriptor.txt

    In FRED_texturedescriptor.txt replace Limey with Fred, and Limey_damaged with fred_damaged. Assuming your car texture is named fred.tga and your damage texture is called fred_damaged.tga

    Edit the FRED_deform_Bits.txt

    Edit the line that reads "limey_bend_data.dcol" and replace it with "none". The car will then have no bend collision.

    That's it! The car should now be perfectly drivable in the game.

    When you're comfortable with this system you should then have a look at the included limey.max to see a more complicated car with detachable meshes, doors and other moving parts. You can Also read over the Function Curve Editing Documentation and alter the performance of your car. The 3DSMax File that resulted from this tutorial is also included as FRED.max.

    Navigate TORUS TDR2000 SDK Documentations :
    Basic Car Tutorial | Complete Car Documentation | Function Curves Editing | DCOL Editor Documentation