Definitions:

In order to start setting up any model for Carmageddon TDR, you must first understand how the models are used by the program.  Below are the main three object placement definitions which the game requires that you understand.

Zero-World Object:  Any object who's coordinates match the location of the Main display null.

Non-Zero-World Object:  Any object which requires placement of a display null which is not located at Zero-World.

Inconsequential-World Object:  Objects who's location does not matter to the game.

OK, this basically translates into:  Objects which originate from the center and objects which originate from some other point other then the center.  We are going to use some common names for our model.  These names should be the ones that you will name things.  For simplicities sake at least.  Once you are comfortable with the complete setup, you may do what you wish.

Common Names:

Dummies:

MAIN_NULL:  The primary zero-world pointer, this object gives the absolute zero coordinates.  If you do not place this object on Max's world zero, you will have to adjust everything that you are doing to match it.  That can be a big pain, so make sure to make it at location 0,0,0.

BEND_NULL:  The primary zero-world pointer for the bend_data mesh.

Inst_(wheel loc):  Non-zero-world pointers for the wheels.  Each points to a location in space where the wheels will appear.  (appears like this:  Inst_FL, Inst_FR, Inst_RL and Inst_RR)

ViewFX:  Zero-world pointer which denotes where all visible objects, except the wheel masters should start being drawn from.

Driver_B32:  Zero-world pointer which denotes which objects will disappear when the user enters cockpit mode. This is generally what would be blocking a clear view of the road.  like the glass, driver, and steering wheel.

Axis_(node):  Non-zero-world pointers which indicate points of rotation.

Switch_Detach_(node):  Inconsequential-world pointers for objects which detach from the main body.

Switch_Deform_(node):  Inconcequential-world pointers which denote a deformable mesh is present.

Brake(node):  Non-zero-world pointers which act as location's for brake light placement.

Towpoint:  Non-zero-world pointer which tells the game where any towed objects will attach.

Flame(node):  Non-zero-world pointers which display flame when the vehicle reaches a certain level of damage.

Special Meshes:

data_(node):  Mesh which represents and contains data concerning dynamic collision.

bend_(node):  A special mesh with point's set at 0 on the Z plane for bending the car during crashes.

pivot_(node):  Mesh who's points indicate location of rotation.

These coupled with the primary meshes which represent the body and it's parts, make up the sum of what objects are needed to display a working car in the game.

Structure:

The primary structure of any vehicle is the only thing necessary to play a vehicle in the game.  It is set up like this:

MAIN_NULL
        Inst_FL
        Inst_FR
        Inst_RL
        Inst_RR
        ViewFX
                chassis
                data_chassis
                        Driver_B32
                                Window_Front
                                Driver
                                SteeringWheel
                Window_Left
                Window_Right
                Window_Back
        Wheel_Master

BEND_NULL
        bend_data

Note, that this vehicle, has a driver, a steering wheel, and a front window attached to the Driver_B32 node.  This means that all these objects will disappear and not be shown to the user when he or she enters the Cockpit view.  Also note, that the names have no spaces in them.  Spaces in names will cause you alot of problems and headaches.

Do not put two data meshes on the same level.  It will cause the game to get very confused.

Detachables:

There are two different types of detachables.  Easily rated by how they perform in the game.

Axis Point Detachable:  These are Non-Zero-World meshes which are hinged on a specific point.  This point only swings one way, and has a minimum and maximum distance.

Pivot Point Detachable:  These are Zero-World meshes which are hinged on one of several points.  The object is allowed to swing freely in any direction.

The structure of  an Axis point detachable is like this:

Axis_Door_L
        Switch_Detach_Door_L
                Switch_Deform_Door_L
                        data_Door_L
                        Door_L

This is roughly put, the object Door_L, who can collide with objects, using data_Door_L, is a deformable mesh which can detach, but only at axis point Axis_Door_L.

The stucture of a Pivot point detachable is like this:

Switch_Detach_Bumper_F
        Switch_Deform_Bumper_F
                Bumper_F
                data_Bumper_F
                        Pivot_Bumper_F

This is of course translated, the object Bumper_F, which can collide with objects, using data_Bumper_F, is a deformable mesh which can detach.  It can detach at any point in object Pivot_Bumper_F.

Sub-Objects:

Sub-objects generally refers to any object which is not directly connected to the ViewFX pointer.  All objects but the Chassis and data_Chassis should be sub-objects.  This rule is broken if you have any seperate mesh, with a seperate map which must be connected to the ViewFX pointer.

Where to connect things:

Connection follows into two rules.  Objects which are always there and objects which are only available while the mesh is in an undamaged state.  Brake lights are a good example of the second.

Attaching an object to the data_(node) of an object, allows that object to be seen all the time.  Attaching the object to the display mesh will allow that object to be seen when the mesh is in an undamaged state, except, when that mesh, or it's previous pointer does not contain the data which gives it the ability to appear undamaged.

Therefore, all detachable objects, flame nodes and towpoint should be attached to the data_chassis, all brake nodes should be attached to the display mesh which would control damage.  The chassis mesh should have the script embedded which tells it it can be damaged.  In the case of LOD's the brake should be attached to the base dummy for the mesh.  Except in the case of the ViewFX.

The ViewFX can be outfitted with the data for the damaged mesh, but is not a common practice.  If a mesh which is linked directly to the ViewFX which does not receive the map designated by the script, then that map will be displayed incorrectly.  Brakes attached at this level should be attached to the lod13_Chassis.

How does this all look?  Here is how it will look in the end:

MAIN_NULL
        Inst_FL
        Inst_FR
        Inst_RL
        Inst_RR
        ViewFX
                chassis
                        Brake01
                        Brake02
                data_chassis
                        Axis_Door_L
                                Switch_Detach_Door_L
                                        Switch_Deform_Door_L
                                                data_Door_L
                                                Door_L
                                                Window_Left
                        Axis_Door_R
                                Switch_Detach_Door_R
                                        Switch_Deform_Door_R
                                                data_Door_R
                                                Door_R
                                                Window_Right
                        Axis_Hood
                                Switch_Detach_Hood
                                        Switch_Deform_Hood
                                                data_Hood
                                                Hood
                        Axis_Trunk
                                Switch_Detach_Trunk
                                        Switch_Deform_Trunk
                                                data_Trunk
                                                Trunk
                        Driver_B32
                                Window_Front
                                Driver
                                SteeringWheel
                        Flame01
                        Flame02
                        Flame03
                        Switch_Detach_Bumper_F
                                Switch_Deform_Bumper_F
                                        Bumper_F
                                        data_Bumper_F
                                                Pivot_Bumper_F
                        Switch_Detach_Bumper_R
                                Switch_Deform_Bumper_R
                                        Bumper_R
                                        data_Bumper_R
                                                Pivot_Bumper_R
                        Switch_Detach_Fender_L
                                Switch_Deform_Fender_L
                                        data_Fender_L
                                                Pivot_Fender_L
                                        Fender_L
                        Switch_Detach_Fender_R
                                Switch_Deform_Fender_R
                                        data_Fender_R
                                                Pivot_Fender_R
                                        Fender_R
                        Towpoint
                Window_Back
        Wheel_Master

BEND_NULL
        bend_data

This would be the basic structure of more then half the cars currently in Carmageddon TDR.

Making Sub-Objects, Sub-Objects:

There are two basic types of sub-objects, detachables and non-detachables.  Non-detachables are zero-world objects which require no special placement and are attached directly to the data or display mesh, depending on if they should appear when that mesh is damaged.  Detachables, however, require special attention.

There isn't a specific way to do this yet, it can be done.  Here is what I have observed.

Pivot point object attached to Axis point object meshes do not need to be offset.

Pivot point object attached to Pivot point object meshes need to be offset, to where, I am still trying to find out.

Dummies attached to Pivot point objects have to be attached to a display mesh, and are not offset.

Dummies attached to Non-Zero-World objects have to be attached to a display mesh, and must be offset from the Zero-World to match the Axis point.

I still haven't found a use to attach an Axis point object to a Pivot point object, but I am sure that there is a reason, nor for an Axis point object to be attached to an Axis point object.  So if you play with this let me know.

Unfortunately, I can't show you how to make these things happen.

LOD's:

The entire structure from the previous section is perfectly capable of being used in the game.  

LOD's are short for Level of Detail.  The game can use the LOD to represent a mesh with a higher detail, at a further distance.  Each LOD mesh is a seperate mesh.

LOD is stated by a lod prefix followed by two numbers, the first is which level of detail it is, the second is the total number in that group.   There are a maximum of 4 levels of detail, for which you can have a maximum of 4 meshes to represent detail.  Example:  lod13_chassis, would be the 1st level of detail mesh, in 3 levels capable by that mesh.  lod34_driver would be the 3rd level of detail out of 4 of the driver mesh.  

The distances will be given in meters when you export the PAK file from Max.

Brakes are adversely affected by the use of LODs. In order for a brake to appear correctly, it needs to be placed on the root level of a data structure.  The dummy directly before it should contain the basic data for weather or not that mesh can be damaged.

Any place where there is a display mesh, you may substitute a LOD.  Any object which does not have the lod prefix will be considered a static mesh, and displayed at all times.

Lod Setup:

My Lod setup for this model will be this:

The Wheel_Master:  Lods 12 and 22.
All Detachables:  Lods 13 and 23.
The Main Body Mesh:  Lods 13,23 and 33.
All Windows:  Lods 12 and 22.

My Lod distances are 100 units for Lod 2 and 200 units for Lod 3. 

All material covered on this page is owned by Beroc-Lord of Destruction, to be used solely on this site.  Please respect my wishes and do not copy this information.