Having trouble logging in? Password not accepted? Recently some bad apples caused a bit of a ruckus around here and a few accounts had to be reset.
Please, drop Toshiba, Errol or n3wton a line and they'll sort you right out! We apologise for any inconvenience this may cause :(


Car Setup Tutorials For Trents MaxScript Tools
Mad Mike created Car Setup Tutorials For Trents MaxScript Tools on Tue Jan 01, 2019 12:13 pm
Post
Carmageddon Max Damage:
Car Setup Tutorials/s for 3ds Max (using Trents Maxscript tools)


Tutorial is currently under-going re-construction.

Primary Levels of guide are now content complete. Some additional resources are still under Construction. Syntax or formatting errors may still present.

Big Thanks to Trent & Errol for their hard work in getting Modding going.
________________________________________________________________________________________________
This guide consists of three levels:
  • Level 1 will contain the basics on how to set up a simple car that will work reasonably well in-game. Basic UI assets will be included CONTENT COMPLETE
  • Level 2 will cover how to set up more advanced features; detachable & Jointed parts, breakable parts (Windows/lights), Lights, advanced UI Assets CONTENT COMPLETE
  • Level 3 will cover how to set up full mechanical & animated parts in all three supported suspension types to match the official Cars - CONTENT COMPLETE
  • Wheel Setup
    - Step by Step of how to set up wheels. Includes 'Required Assets' & notes on deflated tire models CONTENT COMPLETE
________________________________________________________________________________________________
Additional Resources (Not specific to Maxscript):
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 3:19 pm, edited 5 times in total.
Mad Mike on Tue Jan 01, 2019 12:14 pm
Post
________________________________________________________________________________________________
Level 1 - Preface/About:

This is a guide on how to set up a basic car for Carmageddon Max Damage (CMD) using Trents Maxscript Tools, available from here. This guide will not cover how to model or texture a car, there are plenty of tutorials out there for that.

Contents:
  • Chapter 1 - Required & Available Tools (as of April 20th 2017)
  • Chapter 2 - Files, Formats and a breakdown of the paperwork for cars in CMD
  • Chapter 3 (part 1), (part 2) - Rigging a basic car model with all the essential parts required for setup in CMD + a few extra parts that make it more usable
  • Chapter 4 - Exporting that car to the games format
  • Chapter 5 - Setting up basic paperwork and loading the car in-game
________________________________________________________________________________________________
Level 1 - Chapter 1
Required & Available Tools:


  • Trents Maxscript Tools, available from here (only compatible with 3ds Max 2011 and up)
    Used for rigging and exporting a car to the formats used in CMD
  • Gibbed Tools, available from here
    Used for converting textures to and from CRs .TDX format
  • LOLDecoder, available from here
    Used to decode CRs .LOL scripts, so you can edit them in notepad
  • Mod Installer N’ General Enabler, available from here
    Used to package the car into a ZIP file and get your car working in the CarMODgeddon Mode for CMD. Minge (as of 5.12) supports both Max Damage & Reincarnation. It also provides other tools for unpacking the main game data, and can launch Carmageddon directly
  • Any XML Editor of your choice
    Used for editing XML & MT2 files

Note: I recommend extracting all non-installing tools to a ‘Mod-Tools’ Directory and placing it inside the documents folder, which houses all of your car models. The Maxscript should be extracted to the same folder.
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:34 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:14 pm
Post
Level 1 - Chapter 2
Breakdown of Files & Formats in Carmageddon Max Damage:

________________________________________________________________________________________________
2-A] ZAD & ZIP Files:

All official assets in Carmageddon Max Damage are stored in ZAD archives. ZAD archives are simply renamed ZIP files, these can be opened with WinZip, WinRAR, etc.

In CarMODgeddon, all supported Mod content (Vehicles, Wheels & Levels) needs to be stored in ZIP archives. The Directory Structure within the ZIP files is different to the directory structure in the official cars ZAD files and old style 'Legacy Mods' ZADs, but you do not need to worry about this as Trents 'Mod Installer N' General Enabler' (MINGE) will take care of it for you.
________________________________________________________________________________________________
2-B] Model & Textures:
____________________________
Models:

Unlike most games, in Carmageddon Max Damage, car models are stored across multiple model files (.MDL), and all these parts are referenced by a central Hierarchy & Node file .(CNT). The .CNT files do not contain any model data, but define:
  • Parent/child links between the model (.MDL) parts and Null Nodes
  • Where each part (.MDL) is positioned in car-space, (Transformations & Rotations)
  • Additional Node types such as Null Nodes and LITg Nodes.
    Null nodes represent a point in 3d world-space (there is no model information).

Each car usually has two .CNT files
  • Car.CNT - Referencing all main model & parts
  • Collision.CNT - References one or more simple collision meshes
____________________________
Textures:

In Carmageddon Max Damage, all textures used by the cars are stored in the .TDX format. The primary way of converting to and from this format is using GibbedTools, which allows you to convert .TDX files to Portable Network Graphics (.PNG) and convert from .PNG to .TDX.
____________________________
Materials:

Those familiar with 3d modelling will be aware of setting up materials in your modelling application. In Carmageddon Max Damage, material properties are defined in MT2 files. MT2 Files are modified .XML files, and reference one of many preset shaders in Carmageddon Max Damage. Some of these shaders may just take a diffuse texture, others may take in normal & specular maps, and possibly damage & back-face textures. Some will also enable transparency based on Alpha channels (used for windows, lights, flares).
________________________________________________________________________________________________
2-C] Paperwork:
____________________________
2-C-i] Structure.XML

The Structure.XML is the backbone of the car. This file will define what each node & Model from the cars Hierarchy (.CNT) does. This includes (but is not limited to):
  • Basic car characteristics (Offence, General Defence, Car Defence, among several other values)
  • Values determining if parts can deform and if so, by how much
  • Weld parameters, defining what each part is ‘Welded’ to, and how strong the ‘Weld’ is
    Sometimes ‘Welds’ may contain joints allowing parts to open/close or hang before breaking off
  • Physics properties, linking parts to specific behaviours (Wheels, Hubs, etc)
  • Collision parameters
  • Animations (Rotations, Slides, Vibrations, Rocking motions)
  • Advanced suspension setup, Macpherson Strut, Double Wishbone, and Live Axle (with Trailing Arm) are the supported types
  • Point to Point Animations (used for moving parts around in worldspace, mainly used for animating suspension & steering parts)
  • Light settings for car lights
  • Referencing weapon characteristics, to get specific parts to increase damage done to cars, props or pedestrians
  • Advanced damage settings, for substituting materials & subsequently textures (used for windows & lights)
  • Trailer Hitch settings
  • Track IDs & track settings for tracked vehicles
____________________________
2-C-ii] SystemsDamage.XML

The SystemsDamage.XML file defines what it takes to wreck the car. This file specifies what ‘damageable’ parts exist (Body, Engine, Transmission, Wheels, Steering, Tracks, Etc), and how big a contribution damage to these parts makes to physical damage in-game, it also links these damage sections to parts from the car, to correctly localize damage. This way when the cars engine model is hit, it will trigger engine damage.
____________________________
2-C-iii] Setup.LOL

The Setup.LOL file contains all performance data defining how the car will drive and handle, this includes (but is not limited to):
  • RPM Characteristics
  • Torque Curve
  • Gear Ratios
  • Brake Strength and bias
  • Suspension Give & Damping
  • Steering speed and max angle
  • Mass
  • Centre of mass Position (Y & Z positions only)
____________________________
2-C-iv] Vehicle_Setup.LOL

The Vehicle_Setup.LOL primarily defines
  • - Vehicle tier, requirements to unlock it & Leaderboard ID
    Not applicable to Mod Vehicles in CarMODgeddon at this time
  • - Camera Distance settings
  • - Vehicle Class
  • - UI Text (Custom Vehicles only)

Feel free to copy the example below into your vehicle_setup.lol and ammend as necessary.
Code:
module(...)
camera_distance = 32
cop = false
tier = -1
progress = 0
shipped = true
class_rounded = false
class_speedy = false
class_smashy = false
hud_damage_levels = {
  0.2,
  0.4,
  0.6,
  0.8,
  1
}
override_vehicle_name = "Vehicle Name goes here"
override_driver_name = "Driver Name goes here"
override_bio = "Driver bio for your vehicle goes here"

____________________________
2-C-v] Vehicle_Setup.CFG

The Vehicle_Setup.CFG defines all external files the car references, such as:
  • Exhaust (Smoke) Particle FX
  • Tyre (Smoke) Particle FX
  • Tyre Sound FX
  • Engine Sounds
  • Stock wheels
  • Custom Wheels
  • Driver Model/s (AI opponents only)
  • Any trailers the vehicle can spawn with upon event load (includes separate settings for AI & Multiplayer)

This file also defines:
  • Any skins/paint jobs for the vehicle
  • The statistics printed to the UI
  • In-Car camera offset to position the camera in-game
  • Garage camera offset for larger vehicles

Furthermore, there are several other commands that can be used to:
  • disabling driver ejection
  • Limiting suspension extension
  • Limiting suspension compression
____________________________
2-C-vi] VFX_Anchors.LOL

This file will link particle effect emitters (for your exhaust smoke FX defined in Vehicle_Setup.CFG) to parts from the car. Typically the exhaust emitters are Null nodes.
________________________________________________________________________________________________
2-D] UI Assets:

The basic UI assets are the 4 images below:
XXXXX_Default_Top – Top view render of the vehicle used in Menu Grid position screen, vehicle front faces left edge of image (720×360 pixels)
Image
XXXXX_Default_Side – Side view of vehicle pointing right (180×90 pixels)
Image
XXXXX_Default_Minimap – Smaller version of Top, used in the minimap, vehicle front faces left edge of image (180×90 pixels)
Image
XXXXX_Driver – Driver image used in Grid screen and garage, see official cars for positional reference (512×324 Pixels)

‘XXXXX’ will be the folder name of your vehicle. These MUST match, otherwise the UI assets will not work in-game.

The advanced UI asset (damage indicator) will be covered in Level 2.
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 12:41 pm, edited 1 time in total.
Mad Mike on Tue Jan 01, 2019 12:14 pm
Post
Level 1 - Chapter 3 (Part 1)
Rigging a basic car model with all the essential parts required for setup in Carmageddon Max Damage (CMD)

________________________________________________________________________________________________
3-A] Setting up the Tools

To enable the Maxscript:
  • Press the ‘MAXscript’ dropdown in 3ds Max,
  • Navigate to ‘Run Script’
  • The prompt will automatically go to your 3ds max/scripts folder
  • Navigate to where the 'ReincarnationTools' Maxscript folder is stored
  • Select 'ReincarnationTools.ms'
    NOTE: While the current release version of the MaxScript was made for Reincarnation, it still works fine with exporting models & configuring vehicles for use in Max Damage.

You may or may not get a DotTime exception error that may look something like this:
Code:
An attempt was made to load an assembly from a network location which
would have caused the assembly to be sandboxed in previous versions
of the .NET Framework. This release of the .NET Framework does
not enable CAS policy by default, so this load may be dangerous.
If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources
switch. See http://go.microsoft.com/fwlink/?LinkId=155569 for more information.

To deal with this error, you will need to make a change to the "3dsmax.exe.config file". Head to the Troubleshooting section for instructions.

The tools should show up regardless. You can ‘Dock’ the menu with the sidebar in Max, or keep it as a floating toolbar. You may need to set the GibbedTools directory under the ‘Tools’ -> ‘Settings’ section of the MaxScript. This will enable the MaxScript to convert your textures for you when you export the car.

NOTE: The textures MUST be loaded in as .PNG if you want the MaxScript to convert them to the games .TDX format.
________________________________________________________________________________________________
3-B] Required parts for Car setup:

As we are setting up the simplest type of car (that should work reasonably well in-game), We only need 2 model parts.
  1. The Car body (generally named ‘c_Body’)
  2. An engine model

Additionally We are going to need 14 Null Nodes, which will be setup using the MaxScript:
  • 4 x Wheel Nodes (Defining the position & scale of the wheel models in-game)
  • 4 x Brake Nodes (Defines the brakes, an actual model part/s will be used in Level 3)
  • 4 x Hub Nodes (Anchoring point for car wheels to body, an actual model part will be used in Level 3)
  • Driver Node (Where the driver Model will go)
  • Exhaust Node (Where the Exhaust smoke will originate from, you can have multiple nodes if you have 2 or more exhaust pipes)
________________________________________________________________________________________________
3-C] Getting Started:

With what is needed for the car defined, We can begin. below you can see an imported model into 3ds Max with the MaxScript running.
Image

First step is to get the basic material names setup. As this model has been imported from a .3ds, all materials are named ‘Material#0', ‘Material#1', etc. If you’ve built you car in max, you’ll probably already have the materials names setup. The only name of pivotal importance is the ‘bodywork’ material needs to be called ‘Paint’ if you want to be able to change paint jobs/skins in-game.

Otherwise the materials are named appropriately for this car
  • Windows & Lights material -> glass
  • Bodywork material -> Paint
  • Chrome Trim material-> Trim
  • Licence Plate material -> plate
  • Miscellaneous (Grille, Chassis, Interior) material -> Misc

NOTE: If there is no 'paint' material, then the game will crash when you try to load an event.
________________________________________________________________________________________________
3-D] Car position, Orientation & Pivot Point

In Carmageddon Max Damage, the Origin/Pivot Point/Local Axis of the root note (the car body) represents the Ground, and as such the pivot point of the root of the car (Car Body) should be set at (0,0,0) in World Space. This means that your car model must be positioned so the wheels would be touching the ground (Y=Zero), like below
Image

Having moved the car to the correct place, To set the Pivot point of the Car Body back to (0,0,0):
  • Select the Car Body Model only
  • Navigate to the ‘Hierarchy’ Tab on the right menus
  • Press Affect Pivot Only
  • Make sure ‘Absolute Mode Transform Type-In’ (Below the Timeline) is disabled
  • Then Type ‘0.0’ into the X, Y & Z Boxes
Image

Additionally, the car should be rotated so that the front is pointing in the direction of negative values in the Z Axis (this is known as the Y axis in 3ds max).

With that done, now we need to look at adding the necessary parts to the car hierarchy.

NOTE: the car body is named c_Body as the ‘c_’ prefix denotes a part that is crushable on the official CR cars, it is your choice as to whether or not you follow this practice. The ‘c_’ prefix will not automatically make the part crushable, but implies that the part should be made crushable in the structure.xml, parts that are not crushable do not have this ‘c_’ prefix (engine, transmission, hubs, wheels, suspension parts and typically weapons)
________________________________________________________________________________________________
3-E] Adding in the Hub Nodes & Brake Nodes

In section ‘3-B’ We listed the Null Nodes needed for vehicle setup. A Null Node is literally a point of ‘No Displacement’ (A position in World-space) with no geometry, hence ‘Null’. With the MaxScript loaded, the easiest way to create a Null-Node is to Navigate to the ‘Tools’ Menu -> ‘Common’ -> ‘Create Null Node’.

If you press ‘Create Null Node’ while nothing is selected, it will create a null node at the origin of the scene (0,0,0), but if you select a part before creating it, such as a wheel, it will create the Null Node at the Pivot Point of the wheel (make sure the pivot point of each wheel model is set using ‘Center to Object’ prior to creating the null node).
Image

Afterwards, we will hide the wheel models and can see each of the ‘Null Nodes’ that will become the ‘Hubs’.
Image

If we Return to the ‘Modify’ Tab and select one of the Nodes, you will see that the MaxScript has named each Node ‘NewNullNode’, and you will see a ‘CNT Hierarchy’ Section in the modifiers tab. Only parts that have ‘CNT Hierarchy’ data can be exported by the MaxScript.

We are going to rename each Null Node (including the ‘Content Filename’ in the ‘CNT Hierarchy’) to Hub_XX, where ‘XX’ represents which wheel the Hub is for (FL, FR, RL & RR).
Image

Next, We need to set the Hubs as ‘Child’ Objects of the Car Body. For those unfamiliar with hierarchies, press the ‘link’ button (The small chain link icon). Depending on your version of 3ds Max, this might appear in a different place in the Toolbars.

NOTE: For those unfamiliar with hierarchies, the purpose of a model hierarchy is to create parent/child links between models that reflect how parts are connected in the real world. For Example: a Licence plate may be attached to a bumper, and then the bumper is attached to the chassis. Now, if the Licence plate is not a child object of the bumper, when the bumper detaches – the licence plate will be left ‘floating’. Hence, this is why the cars have a hierarchy for all parts.
Image

When active, the icon will be illuminated:
Image

Select one of the Hubs and Drag it to the Car Body, when you release the mouse, the car body wire-frame should flash to indicate the link, repeat this for all hubs. If you accidentally select a different part, then repeat the process for the correct part, or press the ‘Unlink Selection’ button next to the ‘link’ tool to break the link and then recreate it.

The links for the hierarchy can also be set using the schematic view (Icon with two boxes connected by an arrow). The ‘Connect’ Tool within the schematic view works the same as the ‘link’ tool is the main UI, and has the same chain link icon.
Image

With the hubs in place, we are going to use them to create the brakes
  • Right Click on a Hub -> ‘Clone’
  • In the Prompt, make sure to select ‘Copy’ instead of ‘Instance’, and confirm
  • Name each copy ‘Brake_XX’, where ‘XX’ represents which wheel the Brake is for (FL, FR, RL & RR), make sure to change the ‘Content Filename’ under the ‘CNT Hierarchy’ modifier as-well
  • Using the schematic view, make the brake Nodes Child objects of the Relevant Hub
  • If you want, you can then offset the brakes from the hubs (X axis only!) to make selection easier
________________________________________________________________________________________________
3-F] Adding the Wheel Nodes

In the same way that we used the wheel models as reference for creating the Hubs, we are going to use them again to create the Nodes that are used for the wheels in-game. The MaxScript comes with an additional ‘WheelPlaceholder’ system for wheel nodes, that will provide a visual representation of how big the wheels are. This will allow you to scale them perfectly to the required size without having to rely on Trial & Error (exporting multiple times) to get the wheel size right.

Go to the ‘Tools’ -> ‘Car’ section and you will notice a ‘Wheel Tools’, where you can create the wheel nodes in several ways:
  • create a node for each wheel individually
  • create 4 wheel nodes in one go
  • convert a model to a wheel node

If we select one of the wheel models, and then create the appropriate wheel, it will create a wheel node at the origin of the Wheel Model.

NOTE: You might get a warning prompt ‘– Unable to convert: undefined to type: Integer’, disregard it.
Image

Alternatively, if we press ‘create set of 4 wheels’, it will create 4 wheels, all positioned at default values set by Trent, these will need to be positioned manually to where your wheels are. Use whichever tool is of preference, but if you’re creating each wheel individually, be sure to change the drop-down to match the wheels position, otherwise it will generate extra work (having to change names & physics properties) later.

With the wheel nodes created, the next step is to make each wheel a child object of the relevant brake node. It will be easiest to do this using the schematic view. With that done, the hierarchy should look something like this.
Image

________________________________________________________________________________________________
3-G] Engine, Driver Node & Exhaust Node

With the Hubs, Brakes & Wheels now present (although they still need to be configured). The only remaining parts are the Engine model, Driver Node and Exhaust Node.

Engine
Make the engine child part of the 'c_Body'
Image

Exhaust & Driver Node
To create the driver and exhaust nodes, we are going to use ‘Tools’ Menu -> ‘Common’ -> ‘Create Null Node’.

The Driver Node is where the driver is going to sit, so position it accordingly. Since this model has a basic silhouette interior with very little detail (like the traffic cars in Simpsons Hit & Run), the node will have to be positioned where the base of the drivers seat would go. Remember to name this part (including its ‘content filename’) to Driver.
Image

The exhaust Node needs to be positioned where the Tail-pipe ends, and will be called VFX_Exhaust. If you’ve got dual exhausts, then name this node 'VFX_Exhaust_L', create a second node, and name it 'VFX_Exhaust_R'. Alternatively call the nodes 'VFX_Exhaust_0' & 'VFX_Exhaust_1', it is your choice as to what you name these nodes.
Image

The Exhaust Node & Driver Node will then need to be linked to the car body. The hierarchy should now look something like this in the schematic view.
Image
________________________________________________________________________________________________
3-H] Custom Trailer Hitch

This only applies if you want a custom hitch, or to tow something other than a caravan


If you do want to set up a custom trailer hitch, such as the fifth wheel for a Semi Truck, then you will need a trailer hitch model that is seperate from the root of your vehicle. Make sure that the "Trailer Hitch" Part, is parented to the "c_Body", and that its pivot-point/local-axis/object-origin, is set to the point you want the connection to be made. The "Trailer hitch" will be a non-crushable part, so set a single vertex to the weld colour (Green/RGB:000,255,000).
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 5:49 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:15 pm
Post
Level 1 - Chapter 3 (Part 2)
Rigging a basic car model with all the essential parts required for setup in Carmageddon Max Damage (CMD)

________________________________________________________________________________________________
3-I] Car Structure setup Overview

This chapter covers setting up the structure data for what was integrated into the cars hierarchy in Part 1.
________________________
3-I-i] Configure Car Structure

With everything that is needed for a basic car present in the scene, it is time to get the car structure setup, so the MaxScript can write the structure.xml for you when you export the car.

The first step is to setup the CNT Hierarchy data and add structure data to all necessary parts.
  • Select the car body (c_Body)
  • Navigate to the ‘Tools’ -> ‘Common’ section of the Maxscript and press 'Setup Hierachy’**
  • Navigate to the ‘Tools’ -> ‘Car’ section of the Maxscript and press ‘Configure car structure’

Note: These tools should only usually be used when the root node of the car is selected (Car Body model /c_Body).
  • The 'Setup Hierachy’ tool will go through every part in the hierarchy and add CNT hierarchy modifiers to it, unless you've changed the settings in the dropdown to 'Selection only'
  • The ‘Configure car structure’ tool will add basic structure modifiers to all parts (if not already present). On more complex cars, such as the official cars or my own main cars this would take the Maxscript several minutes, as these operations are being conducted on 100 to 150 + parts.

Once this operation has completed, select the Driver Node, and delete the ‘Car Structure Part’ from the modifiers tab, then repeat this for the Exhaust Node(s). These Nodes serve only as points of reference for attaching external files and should never have structure data set.

** - You may notice that the 'setup hierarchy' has a drop down box next to it, with this you can set the tool to:
  • Add CNT Hierarchy data to the selected part & all of its child parts
  • Add CNT Hierarchy data to just the selected part
  • Add CNT Hierarchy data to everything in the scene
________________________
3-I-ii] Car Structure Part Modifiers

Now return to the car body (c_Body) model, and you will notice the following modifiers present under the modify tab in addition to what was present before
  • Car Characteristics – Sets the basic car characteristics (defence, offence, etc) and should only ever appear on the root of the car (c_Body)
  • Vehicle_Setup.cfg – Not currently working, ignore this
  • Car Structure Part – Sets the structure data for that part
  • CNT Hierachy – Required for export, sets the exported file name for model parts

Select ‘Car Structure Part’, and you will notice a lot of drop down menus.
Image

For the simplest of cars, we are only going to be making use of ‘Render Level’, ‘Basic Settings’, ‘Physics Properties’ & ‘Driver Box’. All of the drop downs will configure settings that will be wrote to the ‘Structure.xml’.
________________________
3-I-ii-A] Render Level:

Render level sets at what distance a part is no longer rendered in-game, the Maxscript will default to ‘1’, which means always visible. You will need to select an appropriate value for all parts on your car that have Structure data.

On the official cars
  • 1 = always visible, used by bodywork, wheels and weapons
    Parts that use this level seem to be culled based on part volume relative to a 'far' camera distance. How 'far', depends on graphics settings
  • 2 = rendering culled at far distance, usually used by windows, lights, engine, axles or mechanical parts on clear display
  • 3 = rendering culled at close distance, usually used by all other mechanical parts (wishbones, hubs, mounts, shocks, coil springs, trailing arms, exhausts)

We will be setting a render level of:
  • 3 for the Hubs & Brakes (despite them being Null Nodes with no actual geometry),
  • 2 for the Engine Model
  • 1 for the Body & Wheels

Additionally there is a ‘Named Render Level’ used for setting a render level for parts that don’t have any structure data, such as the Driver Node. There is no point in the driver being visible at a distance, when the player cannot see them. So with the car body (c_Body) selected, we will:
  • Select ‘2’ on the Named Render Level
  • Press ‘Pick Object’
  • Click on the ‘Driver’ Node, the ‘pick object’ should now read ‘Driver’
  • Press ‘Add’

The Named Render Level will generally not be used for anything else on the car.
________________________
3-I-ii-B] Basic Settings:

The ‘Basic Settings’ literally control just that, the most basic of settings. For all parts (except wheels), a crushability value MUST be set
  • 0.0 = Non deformable, part will take damage but won’t visually deform, normally used for mechanical parts & weapons
  • >0.0 = deformable, amount of deformation will vary depending on if this is set to 1.0 or a smaller value

Most crushable parts (bodywork, windows, lights) have a crushability value of 1.0, and a ‘stiffness’ of 0.3, so enable these and set them appropriately. Trent has set the MaxScript so the default values for ‘Crushability’ and ‘Stiffness’ (when enabled) is 1.0 and 0.3 respectively.

Other settings (not usually used by the car body):
  • Mass – Sets a mass for when a part detaches, this may result in damage to cars that hit this part. This value will also be deducted from the cars overall mass making it accelerate quicker
  • Resiliance – Typically used by non-crushable parts (Weapons, Hubs, Suspension Mounts), this acts as a resistance to the part being moved when the car takes damage, stopping your wheels or engine from getting offset significantly in collisions. Usually a value of 1.0 is used on engines
  • Restitution – Only used by wheels, not entirely sure what it does
________________________
3-I-ii-C] Physics Properties:

This will add ‘Physics Properties’ to parts resulting in certain behaviours in-game, usually only used on:
  • Wheels
  • Hubs
  • Tie/Track Rods
  • Steering Wheel
  • Brake Discs/Drums

Collision shapes and bounding multipliers can also be set for parts that are especially high poly or have no geometry, and need simple collision shapes. The available shapes are ‘TIC_TAC_X’, ‘TIC_TAC_Y’ and ‘TIC_TAC_Z’. We will be setting a Collision shape of ‘TIC_TAC_X’ on each wheel when we get to them.
________________________
3-I-ii-D] Driver Box:

The Driver box is used to specify a box, which the driver model/s have to fit into, as this box crushes with the car – the driver will hunker/crouch down until they cannot shrink in volume any more, and are then replaced with the ‘Gibbed’ Organs. This is only ever used by the parent object of the driver node/s.

The Driver box is also used as the primary point of reference for positioning the in-car camera in-game. A manual offset from this point can be defined in the 'vehicle_setup.cfg' if the camera is not positioned where you want it. If a vehicle does not have a driver box, then the game might not allow the use of the in-car camera.

You need to select 8 vertices in the model and change the vertex colour to:
  • - 255,0,255 (Pink) is used for Driver box 1
  • - 0,255,255 (Cyan) is used for Driver Box 2 (only applicable if you’ve got 2 drivers – See Siamese Dream or Stiffshifter)

Below is an example of the 8 selected vertices (highlighted in red & taken from several angles) for the driver box
Image
NOTE: On a more complex model, the vertices used for the driver box will typically be part of the interior, rather than the exterior. Exterior vertices have been used in this instance as there are no suitable interior vertices.

With the vertex colours set accordingly. To actually set the driver box, all you need to to do is navigate to the ‘Driver Box’ Section of the ‘Car Structure Part’ Modifier, and:
  • Input the RGB Values of the driver box vertices in the first 3 boxes
    255,0,255 (Pink) for Driver 1
    000,255,255 (Cyan) for Driver 2 (If applicable)
  • Press ‘Add’
  • The driver box is now set
________________________
With the basic settings drop-downs that we're going to be using to set up this basic car covered. We will now setup the car Structure.
________________________________________________________________________________________________
3-J] Car Structure Setup

Firstly, what we need to do, is setup the root of the car (c_Body)
________________________
3-J-i] Body (Root of car)

Render Level:
  • leave at 1
  • Set ‘Named Render Level’ For driver node at 2

Basic Settings:
  • Enable Crushability at 1.0
  • Enable Stiffness at 0.3

Physics Properties:
  • None for this part

Driver Box:
  • Add a driver box that matches your 8 vertices, use 255,0,255 as the RGB Values

Next We will move onto the first Hub, ‘Hub_FL’.
________________________
3-J-ii] Hub_FL

Render Level:
  • Set to 3

Basic Settings:
  • Enable Crushability and set to 0.0
  • Enable Resiliance and set to 1.0

Physics Properties:
  • Set Collision Shape as ‘TIC_TAC_X’ (without the quotations)
  • Add ‘FRONT_LEFT_POINT_OF_SUSPENSION’
  • Add ‘FRONT_LEFT_POINT_OF_STEERING’

Note: on the other hubs, ‘FRONT_LEFT’ will be the appropriate Physics property for that corner (FRONT_RIGHT, REAR_LEFT OR REAR_RIGHT). Also since we’re not modelling a car with 4 or rear wheel steering, the Rear Hubs (Hub_RL & Hub_RR) will not have a ‘POINT_OF_STEERING’ assigned to them!

Welds:

Now we need to ‘Weld’ the Hub to the ‘C_Body':
  • Navigate to ‘Tools’ -> ‘Car’, and press ‘Add Weld’

A new modifier ‘Car Weld’ should now be present in the modifiers tab
Image

Welds set what parts are attached to in the hierarchy. This is typically the direct parent part or a sibling part (a part with the same parent as this part)
  • Weld Name is optional, I usually set them to reflect what the weld does, in this case that would be ‘HubToBody_FL’
    On the official cars, Weld Names are only used when setting up GangedBreaks (linking welds together so that when one breaks, the other will)
  • Press ‘Weld Partner’ and then select the part to weld to – in this case the c_Body
    ‘Weld Partner’ should now display ‘c_Body’
  • ‘Weakness’ will set the part as being detachable, the official cars typically use weld strengths of the following presets:
    -1 to -8 (integer values only) – these reference preset weld stengths in-game, ‘-1' is weakest, ‘-8' is toughest
    Hubs usually have a weld strength of -4 or -5, We’re going to set it at -5 for this car
  • ‘Absolute Limit’, ‘Chance of Failure’ and ‘Break’ are more advanced weld parameters, which will not be used here
  • As we are welding a part with no geometry, we need to add a vertex to the weld.
    Leave the R,G,B,A values as 0,255,0,0
    Press ‘Part Space’ -> ‘Add’ – this will add a vertex to the part at 0,0,0 in part-space
  • The ‘Joints’ Menu only applies to jointed parts such as doors, hood, trunk, or any part than can dangle or move before breaking off

________________________
3-J-iii] The Other Hubs (Hub_FR, Hub_RL, Hub_RR)

The Setup process for ‘Hub_FL’ should now be repeated for the other hubs (Hub_FR, Hub_RL, Hub_RR), but the physics properties will need to be appropriately assigned.

Hub_FL
  • ‘FRONT_LEFT_POINT_OF_SUSPENSION’
  • ‘FRONT_LEFT_POINT_OF_STEERING’

Hub_FR
  • ‘FRONT_RIGHT_POINT_OF_SUSPENSION’
  • ‘FRONT_RIGHT_POINT_OF_STEERING’

Hub_RL
  • ‘REAR_LEFT_POINT_OF_SUSPENSION’

Hub_RR
  • ‘REAR_RIGHT_POINT_OF_SUSPENSION’
________________________
3-J-iv] Brake_FL

Similarly to the hubs, we will begin the brake setup with Brake_FL.

Render Level:
  • Set to 3

Basic Settings:
  • Enable Crushability and set to 0.0

Physics Properties:
  • Set Collision Shape as ‘TIC_TAC_X’ (without the quotations)
  • Add the Physics property ‘FRONT_LEFT_POINT_OF_ROTATION’

Weld:

Now we need to ‘Weld’ the Brake to the relevant Hub (Hub_FL):
  • Navigate to ‘Tools’ -> ‘Car’, and press ‘Add Weld’
  • Select ‘Weld Partner’, and pick Hub_FL
  • Add a ‘Part Space’ Vertex at 0,0,0 (like we did with the Hub)
________________________
3-J-v] The Other Brakes (Brake_FR, Brake_RL, Brake_RR)

The Setup process for ‘Brake_FL’ should now be repeated for the other brakes (Brake_FR, Brake_RL, Brake_RR), but the physics properties will need to be appropriately assigned. On actual model parts, the ‘POINT_OF_ROTATION’ Physics Property will get the part to rotate at the same speed as the wheel.

Brake_FL
  • ‘FRONT_LEFT_POINT_OF_ROTATION’

Brake_FR
  • ‘FRONT_RIGHT_POINT_OF_ROTATION’

Brake_RL
  • ‘REAR_LEFT_POINT_OF_ROTATION’

Brake_RR
  • ‘REAR_RIGHT_POINT_OF_ROTATION’
________________________
3-J-vi] Wheel_FL

Similarly to the hubs & brakes, we will begin with Wheel_FL. If you have created each wheel correctly (changing the drop-down to match the corner) or by using ‘create set of 4 wheels’, then each wheel should be correctly named, and already have the correct physics properties assigned.

Render Level:
  • Leave at 1

Basic Settings:
  • Do NOT enable crushability, stiffness or Resiliance
  • Enable Restitution and set to an appropriate value, Light cars use 1.0, Trucks use 2.0, so We’ll be using 1.5 for this Intermediate/Mid-size car.

Physics Properties:
  • Set Collision Shape as ‘TIC_TAC_X’ (without the quotations)
  • Add/Verify the Physics property is ‘FRONT_LEFT_WHEEL’

Weld:

Now we need to ‘Weld’ the Wheel to the relevant Brake (Brake_FL):
  • Navigate to ‘Tools’ -> ‘Car’, and press ‘Add Weld’
  • Select ‘Weld Partner’, and pick Brake_FL
  • Set Weakness as -5
  • Add a ‘Part Space’ Vertex at 0,0,0 (like we did with the Hub)

It is vitally important that this weld has a ‘Part Space’ Vertex added, otherwise the tires will be offset from the rim in-game.
________________________
3-J-vii] The Other Wheels (Wheel_FR, Wheel_RL, Wheel_RR)

The Setup process for ‘Wheel_FL’ should now be repeated for the other Wheels (Wheel_FR, Wheel_RL, Wheel_RR), but the physics properties will need to be appropriately assigned as follows:

Wheel_FL
  • ‘FRONT_LEFT_WHEEL’

Wheel_FR
  • ‘FRONT_RIGHT_WHEEL’

Wheel_RL
  • ‘REAR_LEFT_WHEEL’

Wheel_RR
  • ‘REAR_RIGHT_WHEEL’

At this stage, I strongly recommend that at this point you go over all the Hubs, Brakes & Wheels, verifying that the physics properties are correct.
________________________

3-J-Viii] Wheel Size

With the wheels in place and setup, the next step is to set the size of them. This can be done by eye using the scaling function, but there is a considerably more accurate method.

Set Wheel Radius To Position:

Navigate to the ‘Tools’ -> ‘Car’ Section, and under the ‘Wheel’ Tools, you will see a ‘Set Wheel Radius to Position’ tool. Select each wheel individually and then activate this function. It will scale the radius of the selected wheel to the correct size (using the current Y axis position), so it will touch the ground.

Set Wheel Position to Radius:

Under the same menu as the above, this does the opposite of the above function, it will move your wheel in the Y axis (using the current radius) until the wheels touch the ground. It is unlikely that you will need to use this.

Wheel Width:

If your wheels are not the desired width, you can alter this with manual scaling in the X axis. If you accidently end up scaling the whole wheel, you can set the radius back to the correct size by re-using the ‘Set Wheel Radius To Position’ method.
________________________
3-J-ix] Engine

The engine is last part to setup for this basic car. The engine is a non-crushable part, and will need a crushability value of zero.

Render Level:
  • Set to 2

Basic Settings:
  • Enable Crushability and set to 0.0
  • Enable Resiliance and set to 1.0

Physics Properties:
  • None for this part

Engine Weld:

As the engine is a physical model, versus the null nodes used for the Hubs & Wheels. Actual vertices in the part will need to have their vertex colour set to the colour specified in the weld (standard weld value is RGB 0,255,0). But since the Engine is a Non-crushable/Solid Part, and the body is crushable – the engine weld can only have one vertex in it.

Reason for this: If you were to weld a part that cannot deform to a deformable part at more than one point, as the deformable part deforms, you would have to deform the non-deformable part, and in doing so defy the entire point of it being non-deformable.

So with that in mind:
  • Select the 'Editable Mesh' modifier
  • Go to vertex level
  • Select 1 vertex
  • Set the vertex colour as Green (RGB 000,255,000)

Then setup the weld appropriately. I usually use a weld strength of -4 or -5 on the engine of a regular car.
________________________
Some final notes on welds:
  • when welding non-crushable parts to crushable parts, or indeed any parts, the weld vertex doesn’t have to actually meet any vertices on the ‘Weld Partner’, although it will help if it does
  • when welding Crushable parts to Crushable parts (for example: bumper to body), the weld vertices (You can have more than 1) MUST meet actual geometry on the ‘Weld Partner’
  • Crushable parts cannot be welded to non-crushable/Solid parts, if you do – the game will make the crushable parts solid when loading an event
________________________________________________________________________________________________

3-J-x] Custom Trailer Hitch

This only applies if you want a custom hitch, or to tow something other than a caravan


The 'Trailer_Hitch' will typically have the following settings
Render Level:
  • Set to 1

Basic Settings:
  • Enable Crushability and set to 0.0

Physics Properties:
  • None for this part

Hitch Weld:
  • Weld to Parent part (c_Body)
  • Do NOT set a weakness value

Lastly, the trailer hitch function will have to be set manually by pasting the following command:
Code:
CDamageParameters:Set_TrailerHitch( 0, 0, 0, 1 )

into the '<![CDATA[]]>' section for the 'Trailer_Hitch' within the structure.xml. This will be covered in chapter 5.
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:34 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:15 pm
Post
Level 1 - Chapter 4
Exporting the car to the games format

________________________________________________________________________________________________
4] Overview

This chapter will cover:
  • Exporting the main car to the games format
  • Exporting a collision mesh
________________________________________________________________________________________________
4-A] Main car export:

If all of the car setup has been done properly, then this should be nice & easy.
  • Select the Root of the Scene (c_Body)
  • Navigate to the ‘Export’ Tab in the MaxScript
  • Under the ‘Advanced Export’ -> ‘Car’ Tab, enable
    Convert Textures To TDX – only need to use on first export, converts .PNGs to .TDX
    Create Materials – creates basic materials for your car
    Export Structure.xml Data – Writes the Structure.XML

  • Press ‘Export Complete Car’
  • Navigate to your Steam …\Steam\SteamApps\common\Carmageddon Max Damage\CarMODgeddon directory
  • Create a folder for your car, in this case I am using MM_Tut1_78GP
  • Enter Car.CNT and press save

The export process may take several minutes depending on how high or low-poly your car is. If the following error comes up ‘–Unknown property: “Convert” in undefined’, then disable ‘Convert Textures To TDX’, and retry ‘Export Complete Car’, you will then have to convert the textures manually using 'GibbedTools'.

The following should eventually show once the export process has completed:

Export Car to:
C:\… …\DirectorySpecifiedByUserGoesHere Completed

IMPORTANT: If you have scaled or re-sized any part of your vehicle, then the ‘Bake Scale Into Mesh’ under the ‘CNT Hierarchy’ MUST be checked for all parts of the car, except: Driver Node, Exhaust Nodes, Wheel Nodes.
________________________________________________________________________________________________
4-B] Collision Model

4-B-i] Regular vehicles with a convex collision shape
- Typically, these are vehicles that do not have a custom trailer hitch


The last piece to export is a simplified collision model. Per Poly Collision detection is an extremely heavy operation, so each car should have at least 1 simplified collision model (for the c_Body), which reflects the basic outer bounds of the car.

The collision model for this car is ultimately 4 cubes worth of geometry, that roughly matches the cars overall shape. All collision models should be similarly basic.
  • In 3dsMax this part needs to be named c_Body
  • The Pivot Point Should be set to 0,0,0 (like the proper c_Body)
  • Add ‘CNT Hierarchy’ data using ‘Tools’ -> ‘Common’ -> ‘Setup Hierarchy’
    The ‘content filename’ under CNT Hierarchy must be c_Body_Collision, otherwise it will override the proper car body
  • If you have re-scaled any part of the mesh, make sure the checkbox ‘Bake Scale Into Mesh’ is checked
  • Export this as Collision.CNT using ‘Export CNT & MDL Hierarchy’ under ‘Export’

4-B-ii] Vehicles with a con-cave collision shape
- Typically, these are vehicles that do have a custom trailer hitch


If you're building a vehicle that needs a con-cave collision shape, such a Semi-Truck, then you will need to have a collision model consisting of at least two parts. The 'c_Body_Collision' will usually represent the chassis below the hitching point (incorporating the full length & width of the vehicle), with a second collision object for the cab, this second part can be called whatever you want, and must be parented to the "c_Body_Collision" model. Below, you can see an example taken from the '72 Moth Truck.

Red Outlines is the 'c_Body_Collision'
Yellow Outlines is the 'cab_Collision' which is parented to 'c_Body_Collision'
Image
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:34 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:15 pm
Post
Level 1 - Chapter 5
Setting up basic paperwork and loading the car in-game:

________________________________________________________________________________________________
With the car exported, it is worth double checking the structure.xml to ensure that it has exported correctly, the last line should read ‘</STRUCTURE>’. After converting the textures using GibbedTools (If the Maxscript was unable to convert them), paste them into the same directory as the exported car. The UI assets need to be placed into a subfolder called ‘ui_assets’ inside your car folder.

The penultimate step is to copy the paperwork (except the structure.xml) over from the closest matching car, and adapting it to fit. We need the following:
  • SystemsDamage.XML
  • Setup.LOL
  • Vehicle_Setup.LOL
  • Vehicle_Setup.CFG
  • VFX_Anchors.LOL

NOTE: Copy these from the closest matching official car, then open the .LOL files using LOLDecoder to decode them.
________________________________________________________________________________________________
5-A] Structure.xml (XML Editor required)

This only applies if you're setting up a custom trailer hitch


Navigate to where the 'Trailer_Hitch' part is defined. Then add the following command after the 'Set_Crushability()' command.
Code:
CDamageParameters:Set_TrailerHitch( 0, 0, 0, 1 )


Your 'Trailer_Hitch' part should look something like this.

Code:
<PART name="Trailer_Hitch_Plate">
   <![CDATA[
      CDamageParameters:Set_RenderLevel( 1)
      CDamageParameters:Set_Crushability( 0.0)
        CDamageParameters:Set_TrailerHitch( 0, 0, 0, 1 )
      ]]>
   <WELD name="HitchToFrame" partner="c_Body">
   <![CDATA[
      CWeldParameters:Set_VertexColour( 0, 255, 0, 0 )
      ]]>
   </WELD>
</PART>


Save & Exit.
_______________________________________________________________________________________________
5-B] SystemsDamage.XML (XML editor required)

There are 8 sections (bodywork, engine, transmission, steering, fl_wheel, fr_wheel, rl_wheel, rr_wheel) on a regular vehicle. Each section links to a specific damage function in the game. The only thing we need to do is update the ‘Add_SolidPart()’ and ‘Add_ComplicatedPart()’ methods so that the parts referenced in these methods are parts from your car.

In this instance I will change the part referenced in the ‘transmission’ section to engine, that way as the engine takes damage, the transmission will do too.

If building a vehicle with more than four wheels &/or tracks, then there will have to be additional sections in this file.
________________________________________________________________________________________________
5-C] Setup.LOL (once decoded, edit with notepad)

After decoding this, you will see that it contains lots of performance data, I am going to make minimal changes to it for this version of the car. In later tutorials I will make more thorough changes.

As this car is going to be slightly lighter & faster than Caddy, I will increase the ‘PowerMultiplier’, ‘SuspDamping’, and lower the ‘Mass’.
________________________________________________________________________________________________
5-C] Vehicle_Setup.LOL (once decoded, edit with notepad)

If copied from Eagle R or Hawk R, then minimal editing of this file will be required. The 'Vehicle Setup.lol' mainly defines what the opponent tier & the unlock node is for a car, which is not applicable to CarMODgeddon vehicles as all content is unlocked when running in CarMODgeddon mode.

The 'Vehicle Setup.lol' also defines
- Default camera distance setting for the chase camera
- UI Text
- Car Class for Multiplayer

Once you've decoded the vehicle_setup.lol. It may look something like this:
Code:
module(...)
default = true
camera_distance = 25
cop = false
eagle = true
tier = -1
progress = 2
shipped = true
leaderboard_id = 9
class_rounded = true
class_speedy = false
class_smashy = false
hud_damage_levels = {
  0.2,
  0.4,
  0.6,
  0.8,
  1
}


If any of the following are present - You must remove them, these do not apply to custom vehicles
  • unlock_node = 14
  • eagle = true
  • leaderboard_id = 9

So it will end up looking like this, feel free to copy and paste this into your 'vehicle_setup.lol'.

Code:
module(...)
camera_distance = 25
cop = false
tier = -1
progress = 0
shipped = true
class_rounded = false
class_speedy = false
class_smashy = false
hud_damage_levels = {
  0.2,
  0.4,
  0.6,
  0.8,
  1
}
override_vehicle_name = "Vehicle Name goes here"
override_driver_name = "Driver Name goes here"
override_bio = "Driver bio for your vehicle goes here"
}


When you test your car in-game, you can work out the desired value for the 'camera_distance' by tweaking it under the 'camera' section of the pause menu. Then copy that value into the 'camera_distance' setting.

________________________________________________________________________________________________
5-E] Vehicle_setup.CFG (XML editor required)

This will need to be edited to reference the desired external assets (wheels, engine sounds, Exhaust VFX, Skid Mark FX, Tire Smoke VFX, Tire Sound FX, Horn Sound FX, Driver, Trailers). The main amendments required are to change the wheels & skin sections.

5-E-i] Skins

Remove the custom skins (unless you’ve got skins to setup), so you are just left with a default skin, like so:

Code:
[material_map]
 default
 localise FE_CAR_78_GP_STOCK
 shrapnel 180,180,180


The Localise Entry references UI text. It doesn’t matter what it is called at this point, as custom UI text cannot be loaded without invalidating the game cache.

The Shrapnel entry sets the RGB colour for shrapnel that is generated under heavy collisions (mimicking small shards of metal & plastic)

5-E-ii] Wheels

If you don’t have any wheels of your own, then you will need to reference the stock wheels from one of the official cars, you can have as many custom sets of wheels as you want, just maintain the correct syntax & formatting.

5-E-iii] In-Car Camera offset

The in car camera offset defines an XYZ transformation in car space.

Code:
[in_car_cam_offset]
-0.47,-0.43,-0.09


Negative X = Left, Positive X = Right
Negative Y = Down, Positive Y = Up
Negative Z = Back, Positive Z = Forward

5-E-iiii]Trailer Maps

Trailer maps define what trailers a vehicle can spawn with upon event load. This does NOT define what trailers can or cannot be attached, that is determined by the trailer hitch IDs assigned to the 'trailer_hitch' part in the structure.xml. If you do not have a 'trailer_hitch' part, then the game will automatically attach a trailer hitch to the back of your vehicle for attaching caravans.

Available default/official trailers:
  • Caravan
  • Flatbed
  • Flatbed_Empty
  • super_suppressor_rear
  • Tanker
________________________________________________________________________________________________
5-F] VFX_Anchors.LOL (once decoded, edit with notepad)

The ‘lump_name’s referenced in this file have to match the names of your exhaust node/s from the car hierarchy. If you only have one exhaust pipe (like this car) then remove one of the sections, making sure to close the brackets correctly.
________________________________________________________________________________________________
5-G] Loading the car into CarMODgeddon using MINGE

Before testing out your new car, I strongly recommend enabling the ‘script_log’. To Enable the Script Log:
  • Create a new Folder called ‘Diagnostics’ in your Carmageddon Max Damage Folder
    (…\Steam\SteamApps\common\Carmageddon Max Damage)
  • In steam, Right Click on Carmageddon Max Damage and select Properties
  • Select ‘Set Launch Options’
  • Type ‘-dumplogs’ in the prompt (without the quotations)
  • Press ok.
Thanks to AlexTSK for providing the setup info to re-enable the script_log.

Now, every time the game initialises, it will create a ‘Script_Log’ and ‘Session_Log’, within a time-stamped folder. This can help massively with tracking down errors & warnings.

Now to get the car into the game. Start up the ‘Mod Installer N’ General Enabler’ (MINGE)
  1. Make sure to set game to Max Damage (Game -> Select Game -> Max Damage)
  2. Select ‘Package Mods’ -> ‘Package Carmageddon Mod’
  3. Browse to the folder where the car was exported to
  4. Set Mod Type as 'Vehicle' & Game Type as 'Max Damage'
  5. Fill in the Meta Data as desired (Author, Website, Vehicle Name)
  6. Press ‘Package Mod’
  7. Once the mod has packaged, enable the car under the ‘vehicles’ section, save and load the game.
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:33 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:16 pm
Post
Guess what? Now you can start the Game and test out your new set of wheels.

Its Wreck ‘Em Up Time!

Image
Image

NOTE: In the above images, I have replaced the materials created by the MaxScript, to enable use of damage textures, opacity, normal & specular maps, and blood splatters. Recommended Materials & required textures for setup will be covered in a separate Materials Tutorial.

For Level 2 (Detachable Parts, Jointed Parts, Breakable Parts, Lights, Advanced UI assets & more), Head this way.

Any resemblance between the Tutorial car and a Pontiac Grand Prix is entirely co-incidental.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 3:22 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:17 pm
Post
Level 2 - Advanced Car Features
________________________________________________________________________________________________
Preface/About:

Welcome to Level 2! This a guide will build on what was covered in Level 1, including the setup of considerably more car parts for your car in Carmageddon Max Damage (CMD) using Trents Maxscript Tools. This is not a guide on how to model or texture a car, this guide will cover:
  1. Detachable (Crushable) Parts
  2. Detachable (Non-Crushable) Parts
  3. Flappable Parts
  4. Jointed Parts
  5. Breakable Parts (Windows & Lights)
  6. Functional Lights
  7. Part Animations (Engine Vibration, Fan & Pulleys Rotations, etc)
  8. Advanced UI assets (damage indicator)

On the official cars, the car body is divided up into many separate parts, components such as: Bumpers, Air-Dams/Splitters, Wings, Windshield Wipers, Bumpers, Grilles, Hood, Trunk, Fenders, Front-Clip, Quarter Panels, Skirts, Trunk, Tail-Gate & Rocker Panels are among many possibilities for detachable parts. Additionally some parts may be setup as ‘Breakable’ Parts, such as the windows & lights – these parts will substitute their respective materials & textures for one of up to to five damaged versions as they deform, replicating the cracking & shattering of glass & plastic in the real world.

Before We continue, I will be importing the more complex Level 2 version of the Tutorial car. As opposed to the two model parts that made up the Level 1 Model, this new version has Forty-Six Parts all in all. We are going to replace the simple Level 1 ‘c_Body’ with the new version (that is ready to have detachable parts added), and then gradually add in all the extra parts. To replace the old ‘c_Body’ with the new one, follow these steps:

Getting ready for the new car parts
  • Load the MaxScript & open the car you rigged following the Level 1 Tutorial
  • Save it as a new version
  • Rename the ‘c_Body’ as ‘c_Body_old’, and unlink the Hubs, Engine, Driver Node and Exhaust Node using the schematic view
    Make sure that the Brake Nodes & Wheel Nodes are still linked to the hubs
  • Hide your ‘c_Body_Old’

Importing/Merging in the new car
  • Import/merge in your new version of the car (If importing the car from another format, make sure to match-up the material names)
  • Make sure the position of the new ‘c_Body’ and detachable parts is correct
  • Remember the ‘c_Body’ pivot point should be set to 0,0,0

Setting up the new car body to replace the old one
  • Select the new c_Body, and run the following tools: •‘Tools’ -> ‘Common’ -> ‘Setup Hierarchy’
  • ‘Tools’ -> ‘Cars’ -> ‘Configure Car Structure’
    As the new ‘c_Body’ doesn’t have any child parts yet, this should not take long
  • Setup the basic structure data for the new ‘c_Body’ in the same way we did for the ‘c_Body’ in the level 1 Tutorial •Setup the car characteristics (General Defence, Car Defence, Offence, Value Factor, Deform Factor)
  • Setup basic settings (Crushability, Stiffness)
  • Add the Driver Box (remember to set the vertex colour for the 8 vertices that form the driver box)
  • Add ‘Named Render Level’ for the Driver Node

Linking the Hubs and other parts to the new ‘c_Body’
  • Use the Schematic view to link the Hubs, Engine, Driver Node & Exhaust Node to the new ‘c_Body’
  • Change the ‘Weld Partner’ in the Hubs & Engine to the new ‘c_Body’

With these steps complete, to add new parts to the car, we will use the ‘Tools’ -> ‘Car’ -> ‘Add Structure Part’ to add ‘CNT Hierarchy’ and ‘Car Structure Part’ Modifiers. Then the new parts just have to be linked into the hierarchy.

NOTE: This tutorial will not cover setup of every single new part on the Level 2 car. Instead I will cover the different types of parts that can be setup, and in some instances - demonstrate setup on one or two parts. I will leave it up to you to decide which criteria to apply to the parts on your own car. If you have followed the Level 1 tutorial and have a basic car setup & working, then this tutorial should be easy to follow. If you have not completed the Level 1 Tutorial to setup a basic car, then please do so before continuing with this tutorial.
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 1:08 pm, edited 1 time in total.
Mad Mike on Tue Jan 01, 2019 12:17 pm
Post
Level 2 - Chapter 1
Detachable (Crushable) Parts

________________________________________________________________________________________________

Most Body parts in Carmageddon Max Damage are detachable and crushable. The key difference between crushable and non-crushable parts is:
  • crushable parts have a ‘Crushability’ value greater than 0
  • non-crushable parts have a crushability value of 0

Detachable (Crushable) parts will be parts such as bumpers, fenders, quarter panels, hood, trunk, wings, side-steps, running boards, sun-roofs. We will cover setup on the Tutorial car of a Bumper under this method.
________________________________________________________________________________________________
1-A] The weld vertices

As briefly mentioned in Level 1. When crushable parts are welded to crushable parts, the weld vertices MUST meet vertices on the weld partner. In this case, the weld vertices on the bumper will have to meet vertices on the body. If you want, you can only use a single vertex for the weld, it is your choice as long as that vertex matches a vertex on the weld partner. Below you can see the vertices being selected to be used as for the weld. The colour for these vertices, and weld vertices on all other parts that are not jointed should be green (RGB 000,255,000).
Image
________________________________________________________________________________________________
1-B] Car Structure Part Setup

With the weld vertices set. Link the part to the body using the ‘link’ tool. Then press the ‘Add Structure Part’ under ‘Tools’ -> ‘Car’ to add basic structure data. As this is a basic crushable part:
  • Enable Crushability & Stiffness
  • Leave Render Level at 1 (this is a large exterior part, so it needs to be visible)

Then Add the weld:
  • Set Weld Partner as ‘c_Body’
  • Set weakness as -4, or a value of your choosing depending on the type of vehicle you’re building

This is optional but it is worth centring the pivot point for regular detachable parts using ‘Affect Pivot Only’ -> ‘Center To Object’ under the hierarchy modifier. The pivot point is used as a point of reference for LOD culling and collision detection when a part detaches.
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:33 pm, edited 3 times in total.
Mad Mike on Tue Jan 01, 2019 12:17 pm
Post
Level 2 - Chapter 2
Detachable (Non-Crushable) Parts

________________________________________________________________________________________________

The setup process for Non-Crushable Detachable parts (when welding to crushable parts) is very similar to Crushable parts. The major differences are:
  • You can only have a single vertex being used by the weld
  • The weld vertex doesn’t have to meet a vertex on the weld partner
  • Crushability has to be set to 0.0
  • No Stiffness value is set

The example here is the new exhaust pipes, which are separate from the car body. Below you can see the single vertex that will be used for the weld selected.
Image

With the weld Vertex set, press the ‘Add Structure Part’ under ‘Tools’ -> ‘Car’ to add basic structure data. As this is a basic non-crushable part:
  • Enable Crushability & Set it to 0.0
  • Set Render Level at 2 (this is a small exterior part, so it won’t be as easy to see)

Then Add the weld:
  • Set Weld Partner as ‘c_Body’
  • Set weakness as -4, or a value of your choosing depending on the type of vehicle you’re building

NOTE: As this is the exhaust pipe, the Exhaust FX Node will be linked to this part instead of the car body.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:33 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:17 pm
Post
Level 2 - Chapter 3
Flappable Parts

________________________________________________________________________________________________
3-A] Flappable Parts Overview

Flappable parts can open and close when the ‘Flaps’ Key is pressed, as-well as opening after sustaining damage. the joint will originate at each parts local axis/pivot point. Setup for flappable parts is similar to a regular detachable part, but there are a few extra elements to setup. Flappable parts are usually Doors, Hood & Trunk.
________________________________________________________________________________________________
3-B] Pivot Points

For a ‘Flap’ to work correctly, the objects pivot point will need to be set where you want the part to ‘pivot’ about. Make sure to set the pivot point using ‘Affect Pivot Only’ under the ‘hierarchy’ Tab.
Image
________________________________________________________________________________________________
3-C] Weld Vertices

As flappable parts are crushable, remember the weld vertices have to meet vertices on the weld partner. Compared to a regular detachable part, Flappable parts need two different welds, each referencing a different vertex colour:
  • Hinge – Vertex Colour is Red (RGB 255,000,000)
  • Latch – Vertex Colour is Blue (RGB 000,000,255)
________________________________________________________________________________________________
3-D] Structure data & welds

Primary Structure part setup is otherwise identical to any other crushable part, afterwards you will need to add two welds to the part

Hinge
  • Make sure to change vertex colour from Green (default weld colour) to Red
  • Needs a ‘Weakness’ Value (typically -4)
  • Needs a ‘Break’ Value (typically 30) – This is needed to get the part to flap when the ‘flaps’ key is pressed

Latch
  • Make sure to change vertex colour from Green (default weld colour) to Blue
  • No other values set!
________________________________________________________________________________________________
3-E] Creating the Joint

With the welds in place, the next step is to create a joint. With the ‘Flap’ selected, Go to ‘Tools’ -> ‘Car’ -> Create Joint’. This will create the joint at the origin of this part (where the pivot point is) Next We have to configure the joint, and then attach it to the ‘latch’ weld. Generally Flaps use hinges, which is the default joint type when you create a joint in the MaxScript. The values that typically need to be set are:
  • Weakness – Sets how easy the joint is to break
    Usually set to 200-300 (tweak to your liking after testing)
  • Limit – Enables to set the angles that the part can rotate
    First number is the minimum angle (in degrees), usually set to zero as you don’t want your flap to open inwards
    Second number is maximum angle (in degrees), usually set to 70 or higher

  • Flap Springs – sets the force with which the flap will open
    First value is usually 20-30
    Second value is usually 30-40

With the values set, next you need to rotate the joint so that the visual representation of the joint (see below) matches the direction you want the joint to open. The pointed end of the joint illustration represents the max limit of rotation.
Image

NOTE: If you alter any variables of the joint – the rotation of the joint will automatically default to what it was when you created it, so you may need to rotate it back.
________________________________________________________________________________________________
3-F] Adding the joint

The last step is to select the part we want to use this joint, then:
  • Navigate to the ‘Latch’ weld
  • Open the ‘Joints’ drop-down
  • Press ‘Add Joint’, and select this joint
  • Press ‘Add Joint’

This part is now jointed and flappable!

Note: it will be worth double checking the joint axis for each part after exporting the car structure.
The Joint axis method in the structure.xml will look like this
Code:
CWeldJointParameters:Set_JointAxis( 1, 0, 0 )

  • 1 for the first value (like above) will get the joint to rotate forward (X axis), like normal trunks, or a conventional Semi Truck Hood
  • -1 for the first value will get the joint to rotate back (X axis), like a regular hood or tail-gate
  • 1 for the second value will get the joint to rotate (Y Axis) like a regular left side door, or a right side suicide door
  • -1 for the second value will get the joint to rotate (Y Axis) like a regular right side door, or a left side suicide door
  • 1 for the third value will get the joint to rotate (Z axis) like an older style split hood (right side) or right side gull-wing door
  • -1 for the third value will get the joint to rotate (Z axis) like an older style split hood (left side) or left side gull-wing door
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:33 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:18 pm
Post
Level 2 - Chapter 4
Jointed Parts

________________________________________________________________________________________________
Jointed parts are regular parts, that can dangle or open before falling off, but the joint is not activated by pressing the ‘Flaps’ Key. Jointed parts typically use a Ball joint to allow rotation in more than one axis, enabling parts to dangle and drag along the ground.
________________________________________________________________________________________________
4-A] Weld vertices

Similar to a flappable part, jointed parts have to have 2 welds, with 2 different colours for the weld vertices:
  • Regular Weld – Green (RGB: 255,000,000)
  • Jointed Weld – Cyan/Turquoise (RGB: 000,255,255)
________________________________________________________________________________________________
4-B] Structure data & welds

Primary Structure part setup is otherwise identical to any other crushable part or a flappable part. With the Structure data set you will need to add two welds to the part.

Regular Weld:
  • Needs a ‘Weakness’ Value (typically -4)
Jointed Weld
  • Make sure to change vertex colour from Green (default weld colour) to Yellow(RGB: 255,255,000), Yup, that's right - the weld colour is set to Yellow despite the vertices being Cyan/Turquoise. This is how it is set up on the official cars.
  • No other values set!
________________________________________________________________________________________________
4-C] Creating the Joint

With the welds in place, the next step is to create one or two joints. With the Part selected, Go to ‘Tools’ -> ‘Car’ -> Create Joint’. This will create the joint at the origin of this part (where the pivot point is) Next We have to configure the joint, and then attach it to the ‘latch’ weld. Generally Jointed parts use ball joints, so select ‘Ball’ as the ‘Joint Type’. The values that typically need to be set are:

  • Weakness – Sets how easy the joint is to break
    Usually set to 200-300 (tweak to your liking after testing)
  • Limit – Enables to set the angles that the part can rotate in the X axis **
    First number is the minimum angle (in degrees) the part can rotate from where it is normally
    Second number is maximum angle (in degrees) the part can rotate from where it is normally

  • Limit 2 – Enables to set the angles that the part can rotate in the Z axis **
    First number is the minimum angle (in degrees) the part can rotate from where it is normally
    Second number is maximum angle (in degrees) the part can rotate from where it is normally

  • Twist – Enables to set the angles that the part can rotate in the Y axis **
    First number is the minimum angle (in degrees) the part can rotate from where it is normally
    Second number is maximum angle (in degrees) the part can rotate from where it is normally

  • ‘Use Joint Location’ needs to be ticked, and the joint must then be positioned in car-space where you want the part to pivot about
  • ‘Use Joint Normal’ also needs to be ticked

** These axis are local to the joint, if you rotate the joint, then these axis will rotate with it, so once your values are set – rotate the joint so the axis are where you want them to be.

NOTE: If you alter any variables of the joint – the rotation of the joint will automatically default to what it was when you created it, so you may need to rotate it back.

________________________________________________________________________________________________
4-D] Adding the joint

The last step is to select the part we want to use this joint, then:
  • Navigate to the ‘Latch’ weld
  • Open the ‘Joints’ drop-down
  • Press ‘Add Joint’, and select this joint
  • Press ‘Add Joint’

NOTE: Most jointed parts have a joint defined at both ends (E.G. Each end of a bumper), allowing the part to dangle from either end.

________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:33 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:18 pm
Post
Level 2 - Chapter 5
Breakable Parts (Windows & Lights)

________________________________________________________________________________________________
Breakable parts, such as lights & windows, are setup like a crushable detachable part, but are usually not set as being detachable (so don't set a weakness in the weld), unless you want these parts to detach, it’s your choice. With these parts, the Pivot point should be set to the center of the object, as it makes setting the position of ‘Crush Damage Emitters’ easier.

After completing the basic settings like any other crushable part (including the colour of vertices for the weld), you need to look at the ‘Advanced Crush Damage’ Dropdown under the ‘Car Structure Part’ modifier.
________________________________________________________________________________________________
5-A] Crush Damage Substitution

You can have up to five different crush damage materials.
  • Press ‘-1' to start configuring the first stage
  • Enter the name of the material you want to change in the ‘Original Material Name’
  • Enter the name of the desired damaged material you want in the ‘Damaged Material Name’
  • Press ‘Set’
  • Repeat the process for ‘-2', ‘-3', ‘-4' & ‘-5' if you have more damage materials

NOTE: If this part is the windshield, you will want it to break when the driver is ejected, so tick ‘Driver Ejection Smash’
________________________________________________________________________________________________
5-B] Crush Damage Emitter

You can have the same amount of crush damage emitters as crush materials (up to 5)
  • Press ‘-1- to start configuring the first stage
  • Enter the name of the particle effect you want in the ‘Emitter Name’ Box (Official cars usually use F_glasssmall or F_glasslarge) **
  • Press ‘Pick Point’ to select the spawn point, and then click on this part
  • Press ‘Set’

NOTE: An error message may then after pressing ‘set’, disregard it and immediately select a different part, then go pack to the part you’re configuring.
** – for a list of all available particle effects, look in effects.zad
________________________________________________________________________________________________
5-C] Sound Configuration

This sets a Sound effect (SFX) for when the part is damaged. Simply type the name of the effects into the ‘Crush Damage Sound Sub’, official cars usually use GlassLens or PlasticLens.
________________________________________________________________________________________________
5-D] Weld

After setting up the crush damage, don't forget to weld the window/light/breakable part to its parent.
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:33 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:18 pm
Post
Level 2 - Chapter 6
Functional Lights

________________________________________________________________________________________________
To setup working lights, you will need an overlay illuminated version of the desired light models, which needs to be offset by a tiny distance (to avoid clipping issues) from the actual light model.
________________________________________________________________________________________________
6-A] Hierarchy:

On the official cars, the hierarchy for ‘Functional Lights’ are usually organised like this:

Regular Light Model
-> Null Node as child object (this is to keep lights organised)
-> -> Illuminated light Model as child object of Null Node
-> -> Light Generator Node (This is optional, only usually applies to Head lights, brake lights, reverse lights & police lights)

Visual representation of hierarchy:
  • “c_HL_L2? is the regular light model (2nd Headlight on left side of vehicle)
  • “Headlight_L2? is the Null Node (needs to be rotated so it will be pointing out of the vehicle)
  • “c_HL_L2_On” is the illuminated light model (2nd Headlight on left side of vehicle)
  • “Head_Light” is the Light Generator Node (Optional, also needs to be rotated so it will be pointing out of the vehicle)
Image
All of these parts that are child objects of the regular light model will not have structure data. These parts only need ‘CNT Hierarchy’ data, which can be set through ‘Tools’ -> ‘Common’ -> ‘Setup Hierarchy’.
________________________________________________________________________________________________
6-B] The Light Generator (optional):

The Light Generator Node (including its ‘Content Filename’) must be called one of the following, depending on what type of light you’re setting up:
  • head_light
  • brake_light
  • reverse_light
  • cop_blue
  • cop_red
  • cop_head
  • cop_strobe

Additionally, set the Node type from ‘Null’ to ‘LITg’ in the ‘CNT Hierarchy’ modifier. LITg nodes reference pre-set ‘.LIGHT’ files to generate light in-game. Lastly you will need to rotate the Light Generator (‘LITg’) Nodes, so that they are pointing down towards the ground (or in whatever direction you want them to). Below is an example of the ‘Head_Light’ light generators rotated down.
Image
The last step is to set up the lights under the ‘Functional Lights’ Dropdown for the regular light models ‘Car Structure Part’ Modifier.
________________________________________________________________________________________________
6-C] Functional Light Setup:

Select the regular light model, and navigate to the ‘Functional Lights’ Dropdown under the ‘Car Structure Part’ Modifier. You will see several options:
  • Select the relevant light type for the car light (this will trigger the appropriate actions in-game, such as reverse lights only coming on when vehicle is in reverse gear)
  • Press ‘Pick Object’
  • Select the Illuminated light model, and press ‘Add’
  • Repeat the process for the light generator (If applicable)

Here is an example of completed ‘Functional light’ for a car Headlight.

Image

NOTE: the ‘Light Type’ Dropdown will automatically default back to ‘HEAD_LIGHT’ after you ‘Add’ a light.
________________________________________________________________________________________________
6-D] Required .light files:

Once you have exported your vehicle, you will need to get matching ‘.LIGHT’ files from one of the default cars, and place them in the folder with your exported car.
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:32 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:19 pm
Post
Level 2 - Chapter 7
Part Animations

________________________________________________________________________________________________
In Carmageddon Max Damage, there are lots of different animations that can be applied to parts to improve the appearance of parts on the cars. In this tutorial, we will only be looking at the Animations grouped under ‘Standard Animation’ in the MaxScript. The ‘Point to Point Animations’ are usually only used in the setup of vehicle suspension, steering & driveshafts. It is vitally important that the pivot point/local axis for these parts is appropriately positioned & rotated, such as the pivot point for a fan being at the centre of its shaft.

Animation Types:
  • Rotate – Part will rotate ‘A’ degrees in either local X, Y or Z axis
  • Slide – Part will slide ‘A’ units in either local X, Y or Z axis
  • Oscillate – Part will oscillate a minimum of ‘A’ units and a maximum of ‘B’ units in either local X, Y or Z axis
  • Rock – Part will rock back and forth at a speed of ‘A’ units up to a maximum of ‘B’ Degrees in either local X, Y or Z axis, relative to a set position
  • Vibrate – Part will vibrate based of set variables in either local X, Y or Z axis, relative to a set position

With each animation, there are various controllers that can be used to either set a constant animation, or an animation based of a variable relative to the cars state.
________________________________________________________________________________________________
7-A] Rotate:

Usually used for parts like fans, pulleys & driveshaft's, this will set a rotation in a local axis.
  • Fans & Pulleys are usually linked to ‘ENGINE_CRANK_ANGLE’
  • Driveshafts are usually linked to ‘GEARBOX_OUTPUT_ANGLE’, or the relevant ‘WHEEL_ROTATION_…’ for that corner

________________________________________________________________________________________________
7-B] Slide:

The best example of Sliding Animations are those used by the Eagle R & Hawk R to animate their respective Aerofoil spoilers. The Slide will get a part to move in its local X Y or Z axis, using the following variables to define the motion:
  • Desired animation controller
  • Distance to move, usually the part will move this distance per unit of the animation controller (controller dependant)

Aerofoil Spoilers are usually controlled by “SPEED_DEPENDANT_AEROFOIL” or “SPEED_DEPENDANT_AEROFOIL_2?. When these animation controllers are used – the Animation will NOT Trigger until a certain speed has been reached, and will then retract when the vehicle drops below a certain speed. You can set custom speeds for both animation controllers under the ‘Car Characteristics’ Modifier
  • default value for deploying “SPEED_DEPENDANT_AEROFOIL” – 60 Miles per hour (approx. 100 KMH)
  • default value for retracting “SPEED_DEPENDANT_AEROFOIL” – 30 Miles per hour (approx.. 50 KMH)
________________________________________________________________________________________________
7-C] Oscillate:

The best example of an Oscillation is that used on Twisters Drill (in Conjunction with a rotation) The Oscillation will get a part to Move back and forth in a local axis. Variables to be set are:
  • Desired animation controller
  • Minimum amount of movement
  • Maximum amount of movement
________________________________________________________________________________________________
7-D] Rock:

The best example of a Rocking animation is that used by Towmeisters Jaws. The rocking animation will get a part to rotate (in the direction of it’s local X, Y or Z axis) back and forth about a point in part-space. Variables to set include:
  • Desired animation controller
  • Base speed of rocking
  • Max Amplitude (angle) of rocking motion
  • Position of Pivot for rocking motion (defined in part space)

Once the part reaches the Max Amplitude, it will begin rocking back.
________________________________________________________________________________________________
7-E] Vibrate:

Used mainly by engines, takes in various settings to define:
  • Minimum & Maximum frequency (speed) of vibration
  • Minimum & Maximum amplitude (distance/displacement) of vibration
  • Origin of Vibration
  • Desired animation controller, usually ‘ENGINE_NORMALISED_RPM’
________________________________________________________________________________________________
7-F] Animation Controllers:

These are the currently available Animation Controllers. Comments are in Red on line below
Thanks to Trent for collating this list
  • NONE
    // Not tested
  • STEERING_OVER_TIME
    // Not tested
  • STEERING
    // Triggers X units of animation per 1 degree of steering angle,
    Usually used for steering wheel - animation value will need to be negative (-1, -2, -3) for this
    Also used for Subpressors Water Cannon, Tropikills Canoes, APC Camera

  • ENGINE_RPM
    // Triggers X units of animation per 1 RPM
  • ENGINE_CRANK_ANGLE
    // Triggers X units of animation relative to engine crankshaft angle
    Usually used for engine pulleys & radiator fan

  • WHEEL_ROTATION_FR
    // Triggers X units of animation relative to rotation of Front Left Wheel
    Usually used for driveshaft's from diff to Front Right wheel

  • WHEEL_ROTATION_FL
    // Triggers X units of animation relative to rotation of Front Left Wheel
    Usually used for driveshaft's from diff to Front Left wheel

  • WHEEL_ROTATION_RR
    // Triggers X units of animation relative to rotation of Rear Right Wheel
    Usually used for driveshaft's from diff to Rear Right wheel

  • WHEEL_ROTATION_RL
    // Triggers X units of animation relative to rotation of Rear Left Wheel
    Usually used for driveshaft's from diff to Rear Left wheel

  • GEARBOX_OUTPUT_ANGLE
    // Triggers X units of animation per 1 degree of gearbox output angle,
    Usually used for Transmission to Differential animation

  • ENGINE_NORMALISED_RPM_OVER_TIME
    // Not tested yet
  • ENGINE_NORMALISED_RPM
    // Usually used when animating engine (Vibration)
  • ENGINE_RPM_OVER_TIME
    // Not tested
  • CONSTANT_OVER_TIME
    // Not tested
  • CONSTANT
    // Constant Animation
  • WHEEL_SPEED_OVER_TIME
    // Not tested
  • WHEEL_SPEED
    // Not tested
  • SPEED_DEPENDENT_AEROFOIL
    // Triggered when certain speed reached. Custom values can be set for
    - Deploy speed,
    - Retract speed,
    - Time taken to deploy
    - Time taken to retract
    Default Deploy Speed: 60 Miles per hour,
    Default Retract Speed: 30 Miles per hour

  • AIR_BRAKE
    // Triggered when brakes applied, Custom values can be set for
    - Min speed that air brake deploys at
    - Max Speed that air brake deploys at
    - Deploy Speed
    - Retract Speed

  • SPEED_OVER_TIME
    // Not tested
  • SPEED
    // Triggers X units of animation relative to vehicle speed (Metres/Second).
  • SPEED_DEPENDENT_AEROFOIL_2
    // Triggered when certain speed reached. Custom values can be set for
    - Deploy speed,
    - Retract speed,
    - Time taken to deploy
    - Time taken to retract
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:32 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:20 pm
Post
Level 2 - Chapter 8
Advanced UI Assets (Damage Indicator)

________________________________________________________________________________________________
The advanced UI asset is the damage indicator. To set this up, you will need two images at 240×480 Pixels in resolution – ‘HUD_Damage_Backing’ & ‘HUD_Damage_Outline’. Additionally, you will need several Binary files & a configuration file.
________________________________________________________________________________________________
8-A] Required assets
_______________________
HUD_Damage_Backing
This is a render of the top of your vehicle
  • Usually greyscale with no decals (numbers, stripes, flames) applied
  • Alpha channel/Transparency is usually set to solid (255,255,255) around outline, and 60% opaque in centre (153,153,153)
  • An additional faded black outline is usually applied around the edges

Some Examples: Caddy Fat Cat, ’72 Moth Truck, The Plow
ImageImageImage
_______________________
HUD_Damage_Outline
  • This is an outline of the Backing that will be flashed as the car body takes damage
  • The image is just white, with an alpha channel/Transparency of the outline of the car body
Some Examples: Caddy Fat Cat, ’72 Moth Truck, The Plow
ImageImageImage

NOTE: Try to match the scale of your vehicle in the images to the closest official car (Extract the UI assets from that car). It will make the next step easier. Once your UI assets are completed, convert them to .TDX using ‘GibbedTools’ & place them inside the ‘ui_assets’ folder in your car folder.
________________________________________________________________________________________________
8-B] .BIN Files & Layout.lol

To get the damage indicator working, you will need to copy the .BIN files from one of the default cars ‘ui_assets’ folder:
  • HUD_DAMAGE_ANIM.BIN
  • HUD_DAMAGE_IMAGE.BIN
  • HUD_DAMAGE_IMAGE_CONTAINER.BIN

Additionally, you will need to copy the ‘XXX_layout.lol’, where ‘XXX’ is the car name. The layout file will need to be renamed to ‘YourCarFolderNameGoesHere_layout.lol’. Once renamed, decode it will LolDecoder. The ‘_layout.lol’ file defines where (relative to the HUD damage images), the indicators for: Engine, Transmission, Steering and each wheel goes. If the wheel indicators are too big or small in-game, they can be changed.

Here is a list of the available wheels:
_08x14
Image
_12x18
Image
_14x24
Image
_14x12
Image
_10x20
Image
_24x12
Image
_08x86
Image
_track
Image
_tank
Image

Suspension Link? Haven't seen any car using this yet
Image
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:32 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:20 pm
Post
All Done for Chapter 2
________________________________________________________________________________________________
With a selection of the above setup, the tutorial car certainly looks better and falls apart better in-game.
Image
Image
Image
________________________________________________________________________________________________
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 1:22 pm, edited 1 time in total.
Mad Mike on Tue Jan 01, 2019 12:20 pm
Post
Level 3 - Full Mechanical Parts
________________________________________________________________________________________________
Preface/About:

Welcome to Level 3. This Tutorial will cover the integration & setup of full animated mechanical parts for a car, on top of what was covered in the Level 1 & Level 2 Tutorial. Do not attempt this unless you are familiar with the basics covered in the two previous tutorials. Certain elements that were covered through-out the previous two tutorials will not be repeated here.

This guide will cover:
  • Chapter 1 – Overview of Supported Suspension Types in-game & Animations CONTENT COMPLETE
  • Chapter 2 – Overview of Point to Point Animations CONTENT COMPLETE
  • Chapter 3 – Position Helpers & their role in car setup using the Maxscript CONTENT COMPLETE
  • Chapter 4 – Setting up a Live Axle with Trailing Arms - CONTENT COMPLETE
    - (Part 1)
    - (Part 2)
    - (Part 3)
  • Chapter 5 – Setting up (Double) Wishbone Suspension - CONTENT COMPLETE
    - (Part 1)
    - (Part 2)
    - (Part 3)
  • Chapter 6 – (MacPherson) Strut Suspension - CONTENT COMPLETE
    - (Part 1)
    - (Part 2)
    - (Part 3)
  • Chapter 7 – Setting up Steering Rack & Tie Rods for vehicle steering CONTENT COMPLETE
  • Chapter 8 – Powertrain/Drivetrain (Driveshafts) CONTENT COMPLETE
  • Chapter 9 – Example Engine setup (Pulley/Fan Rotation and Engine Vibration) CONTENT COMPLETE
  • Chapter 10 – Extra Interior Parts (Steering Wheel) CONTENT COMPLETE

This guide will not cover how to model the mechanical parts, it will simply show the parts that are required and how to set them up correctly. There is lots of useful information & reference images out there on suspension types.

NOTE: For the purposes of this tutorial, whenever I refer to the vehicles:
  • X Axis – that is the axis of vehicle width (left to Right)
  • Y Axis – that is the axis of vehicle height (Down to Up)
  • Z Axis – that is the axis of vehicle length (Front to Back)
At times I may (additionally) refer to the axis local to 3ds max, this will always be in brackets after the above axis declaration.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 3:16 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:21 pm
Post
Level 3 - Chapter 1
Overview of Supported Suspension Types in-game & Animations

________________________________________________________________________________________________
1-A] Live Axle with Trailing Arms

Live Axles are one of the oldest & simplest suspension types in the world. Each hub is connected to a rigid axle, which is then connected to the vehicles frame/chassis via Leaf Springs or Trailing Arms with independant shock absorbers/Coil Springs. In Carmageddon Max Damage, Live Axles support is based around a Trailing Arm setup as opposed to Leaf Springs.
________________________________________________________________________________________________
1-B] (Double) Wishbone Suspension

Double Wishbone Suspension is the second type of Supported Suspension in Carmageddon Max Damage. With Wishbone Suspension, Each Hub is connected to the vehicles frame/chassis via two wishbones, which link from the upper and lower ends of the hub, to two mounting bracket attached to the chassis.

Additionally there are Shock Absorbers & Coil Springs to cushion & dampen any motion undertaken between the Hubs & the Chassis
________________________________________________________________________________________________
1-C] (MacPherson) Strut Suspension

Similar to Double Wishbone Suspension. Instead of two wishbones connecting to the hub, the Hub is connected to a wishbone on its lower pivot, and connected to shock abosrber & coil Spring on its' upper pivot, which link to a point higher up on the vehicle Body/Chassis[/s]
________________________________________________________________________________________________
1-D] Notes:

All Suspension Types will differ in terms of what you will have to model depending on whether or not Steering or Propulsion applies to that corner. While All Cars in Carmageddon Max Damage are Four Wheel Drive, you can alter the Torque Split to mimic Front Wheel Drive and Rear Wheel Drive (to an extent).

I recommend that you model & animate an appropriate suspension system for each car, rather than trying to squash a Four Wheel Drive system under every car.

Since this tutorial is covering the setup of mechanical parts, all of which are typically non-crushable. Unless otherwise stated in the setup section, all parts will use the following settings under the 'car structure part' modifier.

Quote:
Render Level:
  • Set at 3, unless part is very large or on clear display (Axle, Engine)

Basic Settings:
  • Enable Crushability and set to 0.0
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:32 pm, edited 4 times in total.
Mad Mike on Tue Jan 01, 2019 12:21 pm
Post
Level 3 - Chapter 2
Overview of Point to Point Animations

________________________________________________________________________________________________

As part of setting up each suspension type, you will need to make use of various Point-To-Point Functions to manually animate parts such as: Shock Absorbers, Coil Springs, Trailing Arms, Leaf Springs, Tie Rods & Driveshafts.

The following Point-To-Point functions are used to move and manipulate model parts about a point in their own part space, relative to a point in the space of another part. These are accessed via 'Tools' -> 'Car' -> 'Point-to-Point Animation'.
________________________________________________________________________________________________
2-A] SnapPointToPointOnOtherPart()
Generally Used in Vehicle Suspension & Drivetrain


This Function is used to snap a point on this part (defined locally in part-space), to a point on another part (defined locally in that parts space)
________________________________________________________________________________________________
2-B] RotatePointToPointOnOtherPart()
Generally Used in Vehicle Suspension & Drivetrain


This Function is used to Rotate This part, so that a point on this part (defined locally in part-space), meets a point on another part (defined locally in that parts space)
________________________________________________________________________________________________
2-C] RotatePointToPointOnOtherPartWithScaling()
Generally Used in Vehicle Suspension & Drivetrain


Similar to the above, but the part will be scaled to meet the point on the other part. This is providing that this parts Pivot-Point/Local-Axis/Object-Origin is rotated such that the point on this part can be reached by drawing a line in this parts Local X, Y or Z Axis
________________________________________________________________________________________________
2-D] RotatePointToLineOnOtherPart()
Generally Used in Vehicle Steering


This Function is used to Rotate This part, so that a point on this part (defined locally in part-space), meets a line on another part (defined locally in that parts space)
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:32 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:21 pm
Post
Level 3 - Chapter 3
Position Helpers & their role

________________________________________________________________________________________________
All of the various methods written in a cars structure.xml that pertain to animating parts typically require the declaration of one or more positions defined locally in the space of that part (relative to the parts pivot point). The Position Helpers (accessed via ‘Tools’ -> ‘Car’ -> ‘Create Position Helper’) are used by the various methods in the MaxScript to work out those positions. If you Create a Position Helper (PH) when a Model Part is already selected, then it will create a PH at the Pivot Point of that Part.

PHs can be referenced by multiple methods on multiple parts. The MaxScript will Calculate the PHs position in local part space for any part that references it in any methods when it writes the structure.xml. These are an essential part of setting up animated suspension using the MaxScript.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:32 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:22 pm
Post
Level 3 - Chapter 4 – Live Axle with Trailing Arms
Part 1

________________________________________________________________________________________________
4-A] Required Parts
Mandatory parts to get Suspension system working in-game


When Setting up a Live Axle with Trailing Arms, you will need the following parts (as a minimum) to make the suspension system work.
____________________________
4-A-i] – Hubs

In the Level 1 & 2 Tutorial, we used Null Nodes for the Hubs. Here you will need actual model parts for these. You can see an example of the Hubs in the colour coded image below.
____________________________
4-A-ii] – Live Axle

The Live Axle forms a rigid body between the two hubs. You can see an example of the Axle in the colour coded image below.
____________________________
4-A-iii] – Trailing Arms

A Pair of Trailing Arms will form the connection between the Axle and the Mounts. Both Trailing Arms will need to be separate parts. You can see an example of the Trailing Arms in the colour coded image below.
____________________________
4-A-iiii] – Trailing Arm Mounts

Each Trailing Arm needs a respective mount to attach to. You can see an example of the Trailing Arm Mounts in the colour coded image below.
____________________________
4-A-v] Brake Disc/Drum

In the Level 1 Tutorial, we used null nodes for the brakes. here we will use an appropriate model for the braking system. If you are modelling disc brakes, the Calliper will need to be a separate part from the disc.
____________________________
4-A-Vi] Wheel

Same as the Level 1 Tutorial
________________________________________________________________________________________________
4-B] Extra Parts
Additional parts that are required to fully realize a live axle.


____________________________
4-B-i] Shock Absorbers

A Shock Absorber is there to dampen any movement of the suspension and absorb any ‘shock’ or impulse exerted on it. The Shock Absorber will need to be separated into two parts, an upper & lower shock. These two ‘halves’ should end up rotating in such a way, that they always form a straight line, mimicking the visual appearance of a real shock absorber. You can see an example of the Shock Absorbers in the colour coded image below.
____________________________
4-B-ii] Coil Springs

The Coil Spring is there to provide rebound in the system, and is wrapped around the shock absorber. You can see an example of the Coil-springs in the colour coded image below.
____________________________
4-B-iii] Driveshafts/UJ

As part of transmitting power from your transmission to the axle, you will need to have a part representing a Universal-Joint/UJ attaching to the differential on the axle, and another part for the driveshaft to connect to the Universal-Joint/UJ on your transmission
____________________________
4-B-iiii] Damper/Axle Mount

Lastly, we need to group all of these parts under a single part to keep the hierarchy clean, and ideally simplify the setup process by keeping all of the live axle parts grouped under one non-crushable part to prevent the animated parts from moving away from one another as the vehicle takes damage.
____________________________
4-B-v] Visual Representation

Below is a colour coded image, showing all of the requisite parts listed above.
  • Brake Drums (Red: 255,000,000)
  • Hubs (Orange: 255,102,000)
  • Live Axle (Yellow: 255,255,000)
  • Trailing Arm Mounts (Blue: 000,000,255)
  • Trailing Arms (Green: 000,255,000)
  • Damper (Axle) Mount (Brown: 075,025,000)
  • Upper Shock/Damper (Cyan: 000,255,255)
  • Lower Shock/Damper (Pink: 255,000,255)
  • Coil Spring (White: 255,255,255)

The vehicles chassis & the universal joint are shown in dark grey. Wheels are hidden from view
Image
________________________________________________________________________________________________
4-C] Typical Hierarchy

Below is the Hierarchy of how these parts need to be organised under the Damper (Axle) Mount.
Image
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:32 pm, edited 3 times in total.
Mad Mike on Tue Jan 01, 2019 12:22 pm
Post
Level 3 - Chapter 4 – Live Axle with Trailing Arms
Part 2

________________________________________________________________________________________________
4-D] Part Setup (Mandatory Parts)

Unless otherwise stated in the setup information for each part, all mechanical parts typically have the following main settings

Quote:
Render Level:
  • Set at 3, unless part is very large or on clear display (Axle, Engine)
Basic Settings:
  • Enable Crushability and set to 0.0


Information regarding Pivot Points (accessed under the hierarchy tab) will be in each section.

____________________________
4-D-i] Damper (Axle Mount)

While not strictly a mandatory part, the Damper Mount will keep the hierarchy clean, and ideally simplify the setup process by keeping all of the live axle parts grouped under one non-crushable part to prevent the animated parts from moving away from one another as the vehicle takes damage.

This only needs to be set-up as a non-crushable part, with an appropriate resilience factor to prevent the entire axle system from being offset in a light collision. As the Tutorial Car is a hefty Intermediate car, I have selected a value of 2.0.

Lastly, the damper mount will need to be welded to its parent part – the chassis (or body if vehicle has a unitized body-frame construction). The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
4-D-ii] Hubs

Setup of the Hubs is similar to the hubs for the level one tutorial car, but as we have an actual model part, you do not need to assign a collision property. In addition to basic structure data, the appropriate ‘POINT_OF_SUSPENSION’ must be assigned to match the wheel for that corner of the vehicle.

Additionally, you will need to make use of the ‘Set as Hub’ tool under ‘Tools’ -> ‘Car’. Once this has been pressed, you should see a ‘Hub’ Part Modifier under the modifiers tab. You will need to:
  • set the ‘Hub Type’ as ‘Live Axle Hub’
  • Select the Appropriate Corner, which matches the physics property for that corner
  • Select the Wheel Position, you can either select the wheel node, or the Hub
Image

Additionally, the Hubs Pivot Point (accessed under the hierarchy tab) must have the same Y & Z Axis position as that of the Wheel Nodes, otherwise you may find the entire suspension system offset from where it should be in-game. The same applies for the brake drum/disc and the live Axle.

Lastly, Live Axle Hubs will need to be welded to their parent part – the Live Axle. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
4-D-iii] Axle

The Live Axles’ Pivot Point (accessed under the hierarchy tab) must have the same Y & Z Axis position as that of the Wheel Nodes, otherwise you may get strange off-setting of the entire suspension system in-game.

You do not have to set any physics property for a live axle.

In addition to basic structure data, You will need to use the ‘Set As Axle’ Command under ‘Tools’ -> ‘Car’. It will bring up the following modifier.
Image

Make sure that the ‘Axle Type’ is set as ‘Live Axle’ and that the ‘Axle Wheel’ is always set to the right side for the axle. In this instance, as we are setting up the rear axle – that requires the ‘Axle wheel’ to be set as ‘Rear Right’.

Lastly the Axle Pivot is the point on the axle, where the right trailing arm attaches to the axle. You will need to create a position helper at the point where the Trailing Arm attaches. Below you can see this helper highlighted in white. Depending on how you’ve constructed your axle, that may affect where the Trailing Arm attaches, and subsequently where the pivot point is.

NOTE: The game will calculate where the Trailing Arm attaches to the left side of the axle by mirroring the X position of the Live Axle Pivot point, so make sure your Live Axle & Trailing Arms are symmetrical.

Image

The final step is to weld the Live Axle to the Damper/Axle Mount. Select an appropriate weakness value. Most tougher cars use ‘-5’ to ‘-8’. As the tutorial car is a hefty body on frame intermediate car, I have selected ‘-5’. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
4-D-iiii] Trailing Arm Mounts

In addition to basic structure data, The Trailing Arm Mounts need to make use of the ‘Set as Mount’ command under ‘Tools’ -> ‘Car’. It will bring up the following modifier.
Image

The ‘Axle Type’ needs to be set as ‘Trailing Arm'. The ‘Axle wheel’ will need to match the wheel for that corner, in this case – it is the ‘rear right’ trailing arm for the ‘rear right’ wheel. The ‘Mount Point’ is the point in world-space where the Trailing Arm will attaches to the Mount. Below you can see a Position Helper set to that Point (highlighted in White). If you have set the Trailing Arm Mounts’ Pivot Point (accessed under the hierarchy tab) to this point, then you can just select the Actual Trailing Arm Mount for the ‘Mount Point’.

Image

The Trailing Arm Mount will need to be welded to its’ parent part – the Damper (Axle) Mount. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
4-D-v] Trailing Arms

In addition to basic structure data, The Trailing Arms need to make use of the ‘Set as Trailing Arm’ command under ‘Tools’ -> ‘Car’. It will bring up the following modifier.
Image

The ‘Axle Wheel’ will need to match that of the Trailing Arm Mount, in this case the ‘Rear Right’ Wheel.

The ‘Mount Pivot Point’ is where the Trailing Arm pivots about and attaches to the Trailing Arm Mount. The Pivot point for this part (accessed under the hierarchy tab) should be set to this point.

The ‘Axle Pivot Point’ is where the Trailing Arm meets the Axle. You should reference the ‘Axle Pivot Point’ Position Helper here, make sure to create another helper for the Trailing Arms on the left side of the axle.

Below, both of the position helpers used are highlighted in white.
Image

Despite the trailing Arm declaration, you will need to manually animate the Trailing Arm using a ‘SnapPointToPointOnOtherPart()’ and a ‘RotatePointToPointOnOtherPart()’ function.
____________________________
4-D-v-1] SnapPointToPointOnOtherPart()

Select the ‘Point-to-Point Animation’ under ‘Tools’ -> ‘Car’ to bring up the following modifier. The ‘Point-to-Point Animation’ defaults to ‘SnapPointToPoint’.
Image

As we need the Trailing Arm to stay attached to its’ Mount:
  • The ‘Point on this object’ should be set to the point where the Trailing Arm Pivots about
  • The ‘Other Object’ should be the relevant Trailing Arm Mount
  • The ‘Point on other object’ should be set to the point where the Trailing Arm meets the Mount

So both the ‘Point on this object’ and ‘Point on other object’ need to be set to the same position helper referenced as the ‘Trailing Arm Pivot’.
____________________________
4-D-v-2] RotatePointToPointOnOtherPart()

Select the ‘Point-to-Point Animation’ under ‘Tools’ -> ‘Car’ to bring up a second modifier. change the dropdown to ‘RotatePointToPointOnOtherPart’.
Image

As we need the trailing to rotate to stay with the axle:
  • The ‘Point on this object’ should be set to the point where the Trailing Arm meets the Axle
  • The ‘Other Object’ should be the Axle
  • The ‘Point on other object’ should be set to the point where the Trailing Arm meets the Axle

So both the ‘Point on this object’ and ‘Point on other object’ need to be set to the same position helper referenced as the ‘Axle Pivot Point’ in the Trailing Arm declaration.

Lastly, the trailing arm should be welded to its’ parent part – the Trailing Arm Mount. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
4-D-Vi] Brake Disc/Drum

Setting up the Brake Disc/Drum very similar to how we set-up the brakes in the level 1 tutorial. As we have an actual model part, you do not need to assign a collision property. In addition to basic structure data, the appropriate ‘POINT_OF_ROTATION’ must be assigned to match the wheel for that corner of the vehicle.

The Pivot Point for the Brake Disc/Drum (accessed under the hierarchy tab) must have the same Y & Z Axis position as that of the Wheel Nodes, otherwise you may find the entire suspension system offset from where it should be in-game.

The Brake Disc/Drum should be welded to its’ parent part – the relevant hub Mount. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.

If you have modelled disc brakes, then the ‘Brake Calliper’ will only need basic structure data, and to be welded to it’s parent part – the Hub.
____________________________
4-D-Vii] Wheels

Setting up the Wheels is no different to how we set-up the wheels in the level 1 tutorial. These must be parented to the brake disc/drum, and also welded to their parent.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:32 pm, edited 4 times in total.
Mad Mike on Tue Jan 01, 2019 12:23 pm
Post
Level 3 - Chapter 4 – Live Axle with Trailing Arms
Part 3

________________________________________________________________________________________________
4-E] Extra Parts

These parts are not required to get the suspension system working, but are necessary in completing the look of the suspension system.
____________________________
4-E-i] Shock Absorbers

The Shock Absorber/Damper should be divided into two parts, upper and lower. The Upper Half should be parented to the Damper (Axle) Mount, and the lower half should be parented to the Axle. It is very important that the pivot point for each half of the shock absorber/damper is set to the point where each half of the shock connects to it’s respective parent part.

If the shock absorber is not vertical, then the Pivot Points also need to be rotated to match that rotation. Additionally the Pivot Point for the Upper half of the shock absorber/damper needs to be rotated by an additional 180 degrees in the X Axis, on top of any other rotation.
Image

You will need to create position helper/PH at the pivot points and the end points, of both halves of the shock absorber.

In addition to basic structure data. You will then need to make use of two ‘Point-to-Point’ Animations for each half of the shock.

Upper Half Animations:
  • SnapPointToPointOnOtherPart() – Snaps Pivot Point to Damper/Axle Mount at the same point
  • RotatePointToPointOnOtherPart() - Rotate End Point of This Half to the lower Half of the shock at its’ Pivot Point

Lower Half Animations:
  • SnapPointToPointOnOtherPart() – Snaps Pivot Point to Live Axle at the same point
  • RotatePointToPointOnOtherPart() – Rotate End point of this half to the Upper Half of the shock at its’ Pivot Point

Lastly Each Half of the Shock Absorber will need to be welded to it’s respective parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
4-E-ii] Coil Springs

The Coil Springs will need to be parented to the upper half of the shock absorber. The Pivot Point will need to be set-up in the same way as the upper half of the shock absorber. You will need to create two position helpers. One at the centre of the top of the coil spring, and the Second at the centre of the bottom of the coil spring. In the case of the Tutorial car, these points are set to the end points of the Dampers/Shocks to simplify the number of position helpers required.

Image

In addition to basic structure data, you will need to make use of two ‘Point-to-Point Animation’s. One of which needs to be set to a ‘RotatePointToPointOnOtherPartWithScaling()’.
  • SnapPointToPointOnOtherPart() – Snaps Pivot Point of Coil Spring to Upper Half of Shock Absorber/Damper at the same point
  • RotatePointToPointOnOtherPartWithScaling() – Rotate and scale the End point of the Coil Spring to Lower Half of Shock Absorber/Damper at the same point

Lastly, the Coil Spring should be welded to its’ parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
4-E-iii]Universal Joint/UJ

The final part attached to this live Axle is the Universal Joint depicting the transmission of power to the Axle. This parts’ pivot point needs to be set to the centre of the shaft. This part needs to be parented to the live axle.
Image

In addition to basic structure data, you will need to assign a ‘Standard Animation’ (accessed via ‘Tools’ -> ‘Car’). This will need to be set to rotate by 1 degree in the local Z axis, using the ‘GEARBOX_OUTPUT_ANGLE’ animation controller.

Image

Lastly, the UJ should be welded to its’ parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.

Setup of the driveshaft will be covered under chapter 8 (powertrain/drivetrain).
________________________________________________________________________________________________
4-F] Differences for Front Axle (Hubs & Steering)

When setting up a live axle as a front axle, there are some things that need to be modelled and set up slightly differently.
____________________________
4-F-i] Importance of Pivot Point

When setting up Live Axle Hubs for the front axle, the pivot point will be the point used to rotate the hub when the vehicle steers, and the way the hub visually connects to the axle should be modelled slightly differently to reflect that this part can pivot.
____________________________
4-F-ii] Attachment point on hubs for Tie/Track Rods

When setting up Live Axle Hubs for the front axle, you will need an arm extending from the Hub for the Tie/Track Rods to connect to.
Image
________________________________________________________________________________________________
4-G] Alternate Setup (Faking Leaf Springs)

While Leaf Springs are not officially supported, it is entirely possible to manually animate and 'fake' the appearance of leaf springs. Each Leaf Spring will need to be split in half. The first half will be setup with the 'Trailing Arm' declaration & 'Point-To-Point Animation's, the second will just have the manual 'Point-To-Point Animation's applied.

4-G-i] Visual Representation
Below you can see a visual representation of this.
  • Inner Leaf Spring Mount (Red - 255, 000, 000)
  • Inner Leaf Spring (Orange - 255, 102, 000)
  • Outer Leaf Spring Mount (Green - 000, 255, 000)
  • Outer Leaf Spring (Yellow - 255, 255, 000)
Image
____________________________
4-G-ii] Pivot Points
Since leaf springs are not typically flat like trailing arms, it is very important that the pivot-point for each half of the leaf spring is rotated in such a way, that if you were to draw a straight line in the local Z axis, it would lead to the 'Outboard pivot Point' where the leaf springs meet the axle. This angle can be calculated using simple Trigonometry (a Tangent Function).

For visual reference depicting the rotation of the pivot points, see image below.
Image

Below you can see (roughly), how if you draw a line in the local Z axis, it leads to the outboard pivot point for both halves of the leaf spring.
Image
____________________________
4-G-iii] Typical Hierarchy
As for the hierarchy, each 'half' of the leaf spring will be a child object of the relevant mount, and the mounts will all be child objects of the Damper (Axle) Mount.
Image
____________________________
4-G-iiii] Part Setup

Inner Halves of Leaf Springs
Remember that the inner halves of the Leaf Springs and their mounts will have to have the relevant 'Trailing Arm' & 'Trailing Arm Mount' declarations. Then the leaf springs will need two manual animations:
  • 'SnapPointToPointOnOtherPart()' - Snap pivot point to respective Mount at the point
  • 'RotatePointToPointOnOtherPart()' - Rotate End Point of this half to the Live Axle at the same point

Outer Halves of Leaf Springs
The Outer halves of the Leaf Springs and their mounts will just need basic structure data. Then the Leaf Springs will need two manual animations:
  • 'SnapPointToPointOnOtherPart()' - Snap pivot point to Mount at the point
  • 'RotatePointToPointOnOtherPartWithScaling()' - Rotate and scale End Point of this half to the Live Axle at the same point

Lastly, don't forget to weld these parts to the their respective parent parts. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:31 pm, edited 3 times in total.
Mad Mike on Tue Jan 01, 2019 12:23 pm
Post
Level 3 - Chapter 5 - (Double) Wishbone Suspension
Part 1

________________________________________________________________________________________________
5-A] Required Parts
Mandatory parts to get Suspension system working in-game


When setting up (Double) Wishbone suspension, the following parts are the minimum required to animate the suspension.
____________________________
5-A-i] Wishbone Mounts

When setting up Wishbone suspension, you will need two wishbone mounts, one for the lower wishbone, and one for the upper wishbone. The Wishbone mount serves as the anchoring point for the entire suspension system to the vehicle chassis. Both mounts are usually unified into a single part. This is to avoid the risk of the wishbone mounts moving apart and messing up the entire suspension system. You can see an example of the Wishbone Mount in the colour coded image below.
____________________________
5-A-ii] Upper & Lower Wishbone

A wishbone hub needs two wishbones to connect it to the mounting point on the chassis. The Wishbones do not have to be of identical length or at the same angle. If your wishbones are at an angle, make sure that angle is an integer value and keep a record of it, as it will affect the pivot point.
____________________________
5-A-iii] Wishbone Hub

A wishbone Hub connects the brakes & wheel to the suspension system. It will need to have attachment points for both wishbones.
____________________________
5-A-iiii] – Brake Disc/Drum

In the Level 1 Tutorial, we used null nodes for the brakes. here we will use an appropriate model for the braking system. If you are modelling disc brake, the Calliper will need to be a separate part from the disc.
____________________________
5-A-v] Wheel

Same as the Level 1 Tutorial
________________________________________________________________________________________________

5-B] Extra Parts
Additional parts that are required to fully realize Double Wishbone suspension.

____________________________
5-B-i] Damper Mount

This part serves as a mounting point for the upper half of the shock absorber, it can be unified into the wishbone mount if you choose.
____________________________
5-B-ii] Shock Absorbers

A Shock Absorber is there to dampen any movement of the suspension and absorb and ‘shock’ or impulse exerted on it. The Shock Absorber will need to be separated into two parts, an upper & lower shock. These two ‘halves’ should end up rotating in such a way, that they always form a straight line, mimicking the visual appearance of a real shock absorber. You can see an example of the Shock Absorbers in the colour coded image below.
____________________________
5-C-iii] Coil Springs

The Coil Spring is there to provide rebound in the system, and is wrapped around the shock absorber. You can see an example of the Coil-springs in the colour coded image below.
____________________________
5-C-iiii] Visual Representation

Below is a colour coded image, showing all of the requisite parts listed above.
  • Brake Disc (Red: 255,000,000)
  • Brake Calliper (Grey: 153,153,153)
  • Hubs (Orange: 255,102,000)
  • Lower Wishbone (Yellow: 255,255,000)
  • Wishbone Mount (Blue: 000,000,255)
  • Upper Wishbone (Green: 000,255,000)
  • Damper Mount (Brown: 075,025,000)
  • Upper Shock/Damper (Cyan: 000,255,255)
  • Lower Shock/Damper (Pink: 255,000,255)
  • Coil Spring (White: 255,255,255)
Image
Image
________________________________________________________________________________________________
5-C] Typical Hierarchy

Below is the Hierarchy of how these parts need to be organised under the Wishbone Mount.
Image
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:31 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:23 pm
Post
Level 3 - Chapter 5 - (Double) Wishbone Suspension
Part 2

________________________________________________________________________________________________
5-D] Part Setup
Unless otherwise stated in the setup information for each part, all mechanical parts typically have the following main settings

Quote:
Render Level:
  • Set at 3, unless part is very large or on clear display (Axle, Engine)
Basic Settings:
  • Enable Crushability and set to 0.0


Information regarding Pivot Points (accessed under the hierarchy tab) will be in each section.
____________________________
5-D-i] Wishbone Mount

In addition to the basic structure data, the Wishbone mount will need a resilience value, similar to the Axle/Damper Mount covered earlier. For the Tutorial car, which is a hefty intermediate car, this has been set as 2.0.

The ‘Set As Mount’ command under ‘Tools’ -> ‘Car’ will need to be used twice for this part. Once for the upper wishbone mount declaration, and once for the lower wishbone mount declaration. You will need to create a position helper at the pivot point of both wishbones where they meet the wishbone mount.

The Mount modifier will appear as follows
Image

Each Wishbone Mount will need to have two ‘Wishbone Mount’s set, one for the upper, and one for the lower wishbone.
  • The ‘Axle Wheel’ is the wheel for that corner.
  • The 'pivot axis' is the axis in which the wishbone pivots and should be set to Z.
  • The 'Mount point’ needs to reference the position helper for the relevant wishbone, and is the point where that wishbone will meet the mount.

Make sure that each ‘Wishbone Mount’ declaration has the correct ‘Mount Point’ for the ‘Axle Type’, in other words – don’t use the position helper for the lower wishbone when setting up the upper wishbone mount.

Lastly, the Wishbone Mount should be welded to its’ parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
5-D-ii] Wishbones

Setup of the Wishbones is fairly straightforward, but requires a position helper at both the wishbones Pivot point and its’ end point (where it meets the hub). These are highlighted below in white
Image
Additionally, the Wishbones pivot point (accessed under the hierarchy tab) should be set to the point where the wishbone meets the wishbone mount, like below.
Image

In addition to the basic structure data, each Wishbone will need to be set as a ‘wishbone’ using the ‘Set As Axle’ Command under ‘Tools’ -> ‘Car’. The modifier will appear as follows.
Image

  • The ‘Axle Type’ & ‘Axle Wheel’ will need to bet set accordingly,
    In this case it’s the ‘Upper’ wishbone for the ‘Front left’ wheel. The Pivot axis needs to be set as Z to match the axis set for the wishbone mount.
  • The ‘Inboard Pivot Point’ needs to reference the point where the wishbone meets it’s mount. So select the relevant position helper, or reference the wishbone itself as it’s ‘pivot point’ should beset to that point.
  • The ‘Outboard Pivot Point’ is where the wishbone meets the Hub. So select the position helper at the point where the wishbone meets the hub.

Lastly, the wishbones should be welded to their parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part. Both wishbones should have a weakness value set.

Make sure to give the weld for the lower wishbone a unique name, as it will be referenced in a ‘Ganged Break’ with the Hub!
____________________________
5-D-iii] Hub

Setup of the Hubs is similar to the hubs for the level one tutorial car, but as we have an actual model part, you do not need to assign a collision property. In addition to basic structure data, the appropriate ‘POINT_OF_SUSPENSION’ & ‘POINT_OF_STEERING’ must be assigned to match the wheel for that corner of the vehicle.

As this hub is on the front suspension, and used for steering, the pivot point for the Hub will be used in determining the point about which the wheels are steered. Ideally the Hubs pivot point will have the same X & Z axis co-ordinates as the point where the lower wishbone meets the hub. The Hubs pivot point MUST have the same Y Axis position as that of the brakes & wheels, otherwise the suspension system could be offset in-game.

Additionally, you will need to make use of the ‘Set as Hub’ tool under ‘Tools’ -> ‘Car’. Once this has been pressed, you should see a ‘Hub’ Part Modifier under the modifiers tab.
Image
  • The ‘Hub Type’ will need to be set as ‘Wishbone hub’
  • The ‘Pivot Axis’ will need to match that of the wishbones and wishbone mount (Z axis)
  • The ‘Axle Wheel’ will need to match the wheel for that corner, in this case – Front Left
  • For the ‘Wheel Position’, just reference the hub itself
  • The ‘Upper Pivot Point’ is where the upper wishbone meets the hub, so use the relevant position helper
  • The ‘Lower Pivot Point’ is where the lower wishbone meets the hub, so use the relevant position helper

The Hub should be welded to the Upper Wishbone and NOT its’ parent part. The weld should have a weakness value set and a unique name. In the ‘Ganged Break’ box, copy in the name of the weld that holds the lower wishbone to it’s mount, and then copy the name of the hub weld to the ‘Ganged Break’ box on the weld for the lower wishbone. The Ganged Break means that if one of these welds break, the other will too. The weld vertex/vertices do NOT have to meet an actual vertex on the ‘Weld Partner’.
____________________________
5-D-iiii] Brake Disc/Drum

Setting up the Brake Disc/Drum is no different to how we set-up the brakes in the level 1 tutorial, but as we have an actual model part, you do not need to assign a collision property. In addition to basic structure data, the appropriate ‘POINT_OF_ROTATION’ must be assigned to match the wheel for that corner of the vehicle.

The Pivot Point for the Brake Disc/Drum (accessed under the hierarchy tab) must have the same Y & Z Axis position as that of the Wheel Nodes, otherwise you may find the entire suspension system offset from where it should be in-game.

The Brake Disc/Drum should be welded to its’ parent part – the relevant hub Mount. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.

If you have modelled disc brakes, then the ‘Brake Calliper’ will only need basic structure data, and to be welded to it’s parent part – the Hub.
____________________________
5-D-V] Wheels

Setting up the Wheels is no different to how we set-up the wheels in the level 1 tutorial. These must be parented to the brake disc/drum, and also welded to their parent.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:31 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:24 pm
Post
Level 3 - Chapter 5 - (Double) Wishbone Suspension
Part 3

________________________________________________________________________________________________
5-E] Extra Parts

These parts are not required to get the suspension system working, but are necessary in completing the look of the suspension system.
____________________________
5-E-i] Shock Absorbers

The Shock Absorber/Damper should be divided into two parts, upper and lower. The Upper Half should be parented to the Damper Mount (or wishbone mount if the damper mount is part of the wishbone mount), and the lower half should be parented to the lower wishbone, or the hub (whatever part it attaches to). It is very important that the pivot point for each half of the shock absorber/damper is set to the point where each half of the shock connects to it’s respective parent part.

If the shock absorber is not vertical, then the Pivot Points also need to be rotated to match that rotation. Additionally the Pivot Point for the Upper half of the shock absorber/damper needs to be rotated by an additional 180 degrees in the Z Axis (known as the Y Axis in 3ds max), on top of any other rotation.

Image

You will need to create position helper/PH at the pivot points and the end points, of both halves of the shock absorber.

In addition to basic structure data. You will then need to make use of two ‘Point-to-Point’ Animations for each half of the shock.

Upper Half Animations:
  • SnapPointToPointOnOtherPart() – Snaps Pivot Point to Damper Mount at the same point
  • RotatePointToPointOnOtherPart() -Rotate End Point of This Half to the lower Half of the shock at its’ Pivot Point

Lower Half Animations:
  • SnapPointToPointOnOtherPart() – Snaps Pivot Point to lower Wishbone/Parent Part at the same point
  • RotatePointToPointOnOtherPart() – Rotate End point of this half to the Upper Half of the shock at its’ Pivot Point

Lastly Each Half of the Shock Absorber will need to be welded to it’s respective parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
5-E-ii] Coil Springs

The Coil Springs will need to be parented to the upper half of the shock absorber. The Pivot Point will need to be set-up in the same way as the upper half of the shock absorber. You will need to create two position helpers. One at the centre of the top of the coil spring, and the Second at the centre of the bottom of the coil spring. In the case of the Tutorial car, these points are set to the end points of the Dampers/Shocks to simplify the number of position helpers required.

Image

In addition to basic structure data, you will need to make use of two ‘Point-to-Point Animation’s. One of which needs to be set to a ‘RotatePointToPointOnOtherPartWithScaling()’.
  • SnapPointToPointOnOtherPart() – Snaps Pivot Point of Coil Spring to Upper Half of Shock Absorber/Damper at the same point
  • RotatePointToPointOnOtherPartWithScaling() – Rotate and scale the End point of the Coil Spring to Lower Half of Shock Absorber/Damper at the same point
Lastly, the Coil Spring should be welded to its’ parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.

________________________________________________________________________________________________
5-F] Differences for Rear Suspension (Hubs)

When modelling wishbone suspension for rear suspension, there will be some minor differences in how the parts should be modelled.
____________________________
5-F-I] Modelling different attach points on hub (hinges rather than ball joints)

Non-steering (Rear wheel) Hubs on wishbone suspension will be modelled slightly differently to the front hubs. On a Hub that is used for steering, it is connected to the wishbones via ball joints and would be modelled that way. But on a hub that is not used for steering, it is connected via hinges, so adapt the model accordingly.
____________________________
5-F-ii] Driveshafts/UJs

To be covered briefly in the powertrain section. For Wishbone suspension, you will need to break the driveshaft down to a total of four parts for each corner on a wishbone setup.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:31 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:24 pm
Post
Level 3 - Chapter 6 - (MacPherson) Strut Suspension
Part 1

________________________________________________________________________________________________
5-A] Required Parts
Mandatory parts to get Suspension system working in-game


When setting up (MacPherson) Strut suspension, the following parts are the minimum required to animate the suspension.
____________________________
5-A-i] Wishbone Mount

When setting up Strut suspension, you will need a wishbone mount, with an attachment point for a single wishbone, and an attachment point for the shock absorber/strut. The Wishbone mount serves as the anchoring point for the entire suspension system to the vehicle chassis. You can see an example of the Wishbone Mount in the colour coded image below.
____________________________
5-A-ii] Strut Wishbone

A Strut hub needs a single wishbone to form the lower connection to the wishbone mount. If your wishbone is at an angle, make sure that angle is an integer value and keep a record of it, as it will affect the pivot point.
____________________________
5-A-iii] Strut Hub

A Strut Hub connects the brakes & wheel to the suspension system. It will need to have an attachment point for the wishbone, but it will also need to have the lower half of the shock absorber integrated into the upper part of the hub. Below is an example of the strut hub.
Image
Further down You can see an example of the Strut hub in the colour coded image.
____________________________
5-A-iiii] – Brake Disc/Drum

In the Level 1 Tutorial, we used null nodes for the brakes. here we will use an appropriate model for the braking system. If you are modelling disc brake, the Calliper will need to be a separate part from the disc.
____________________________
5-A-v] Wheel

Same as the Level 1 Tutorial
________________________________________________________________________________________________
5-B] Extra Parts
Additional parts that are required to fully realize Double Wishbone suspension.

____________________________
5-B-ii] Shock Absorber (upper half only)

In Macpherson strut suspension, the hub forms a strut with the shock absorber. Since the lower half of the shock absorber is part of the strut hub, you only need to have the upper half as a separate part. You can see an example of the upper shock in the colour coded image below.
____________________________
5-C-iii] Coil Springs

The Coil Spring is there to provide rebound in the system, and is wrapped around the shock absorber. You can see an example of the Coil-springs in the colour coded image below.
____________________________
5-C-iiii] Visual Representation

Below is a colour coded image, showing all of the requisite parts listed above.
  • Brake Disc (Red: 255,000,000)
  • Brake Calliper (Grey: 153,153,153)
  • Strut Hub (Orange: 255,102,000)
  • Wishbone (Yellow: 255,255,000)
  • Wishbone Mount (Blue: 000,000,255)
  • Upper Shock/Damper (Cyan: 000,255,255)
  • Coil Spring(Pink: 255,000,255)
Image
Image
________________________________________________________________________________________________
5-C] Typical Hierarchy

Below is the Hierarchy of how these parts need to be organised under the Wishbone Mount.
Image
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:31 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:25 pm
Post
Level 3 - Chapter 6 - (MacPherson) Strut Suspension
Part 2

________________________________________________________________________________________________
5-D] Part Setup
Unless otherwise stated in the setup information for each part, all mechanical parts typically have the following main settings

Quote:
Render Level:
  • Set at 3, unless part is very large or on clear display (Axle, Engine)
Basic Settings:
  • Enable Crushability and set to 0.0


Information regarding Pivot Points (accessed under the hierarchy tab) will be in each section.
____________________________
5-D-i] Wishbone Mount

In addition to the basic structure data, the Wishbone mount will need a resilience value, similar to the Axle/Damper Mount covered earlier in the Live Axle Tutorial. For the '67 Rattler, which is a light sports car, this has been set as 1.0.

The ‘Set As Mount’ command under ‘Tools’ -> ‘Car’ will need to be used twice for this part. Once for the Lower Strut (Wishbone) mount declaration, and once for the Upper Strut mount declaration. You will need to create a position helper at the pivot point of for both the upper and lower struts where they meet the wishbone mount.
The Mount modifier will appear as follows
Image

Each Strut Mount will need to have two ‘Strut Mount’s set, one for the upper, and one for the lower strut.
  • The ‘Axle Wheel’ is the wheel for that corner.
  • The 'pivot axis' is the axis in which the wishbone pivots and should be set to Z.
  • The 'Mount point’ needs to reference the position helper for the relevant strut, and is the point where that part will meet the mount.
Just to clarify for those who are uncertain, the 'lower strut' is the wishbone that connects to the bottom of the Strut Hub, and the 'upper strut' is the shock absorber that connects to the top of the Strut Hub.

Make sure that each ‘Strut Mount’ declaration has the correct ‘Mount Point’ for the ‘Axle Type’, in other words – don’t use the position helper for the lower strut when setting up the upper strut mount.

Lastly, the Wishbone Mount should be welded to its’ parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
5-D-ii] Strut Wishbone

Setup of the Wishbone is fairly straightforward, and is almost identical to the setup for a wishbone for Double Wishbone Suspension. A Strut wishbone requires a position helper at both the wishbones Pivot point and its’ end point (where it meets the hub). These are highlighted below in white.
Image
Additionally, the Wishbones pivot point (accessed under the hierarchy tab) should be set to the point where the wishbone meets the wishbone mount, like below.
Image

In addition to the basic structure data, the Wishbone will need to be set as a ‘wishbone’ using the ‘Set As Axle’ Command under ‘Tools’ -> ‘Car’. The modifier will appear as follows.
Image
  • The ‘Axle Type’ & ‘Axle Wheel’ will need to bet set accordingly,
    In this case it’s the ‘Strut Wishbone’ for the ‘Front left’ wheel. The Pivot axis needs to be set as Z to match the axis set for the wishbone mount.
  • The ‘Inboard Pivot Point’ needs to reference the point where the wishbone meets it’s mount. So select the relevant position helper, or reference the wishbone itself as it’s ‘pivot point’ should beset to that point.
  • The ‘Outboard Pivot Point’ is where the wishbone meets the Hub. So select the position helper at the point where the wishbone meets the hub.

Lastly, the wishbone should be welded to their parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part. Unlike (Double) Wishbone suspension, you do not need to set a weakness for this.

____________________________
5-D-iii] Strut Hub

Setup of the Strut Hub is similar to the hubs for the level one tutorial car, but as we have an actual model part, you do not need to assign a collision property. In addition to basic structure data, the appropriate ‘POINT_OF_SUSPENSION’ & ‘POINT_OF_STEERING’ must be assigned to match the wheel for that corner of the vehicle.

As this is a strut hub, the pivot point for the Hub needs to be positioned so that if you were to draw a straight line in the local Y axis of the Shock Absorber/Upper Damper, it would lead directly to the Pivot point of the Hub. Below you can see the pivot points for the Strut Hub, Upper Damper and Coil Spring.
Image

Additionally, you will need to make use of the ‘Set as Hub’ tool under ‘Tools’ -> ‘Car’. Once this has been pressed, you should see a ‘Hub’ Part Modifier under the modifiers tab.
Image
  • The ‘Hub Type’ will need to be set as ‘Strut hub’
  • The ‘Pivot Axis’ will need to match that of the wishbone and the wishbone mount (Z axis)
  • The ‘Axle Wheel’ will need to match the wheel for that corner, in this case – 'Front Left'
  • For the ‘Wheel Position’, select the matching wheel, in this case 'Wheel_FL'
  • The ‘Upper Pivot Point’ is where the lower half of the shock absorber meets the hub, so use the relevant position helper
  • The ‘Lower Pivot Point’ is where the wishbone meets the hub, so use the relevant position helper

It seems that the 'Lower Pivot Point' is used as the point of rotation for when the hub rotates/steering.

The Hub should be welded to the Wishbone and NOT its’ parent part. The weld does not have to have a weakness value set The weld vertex/vertices do NOT have to meet an actual vertex on the ‘Weld Partner’.
____________________________
5-D-iiii] Brake Disc/Drum

Setting up the Brake Disc/Drum is no different to how we set-up the brakes in the level 1 tutorial, but as we have an actual model part, you do not need to assign a collision property. In addition to basic structure data, the appropriate ‘POINT_OF_ROTATION’ must be assigned to match the wheel for that corner of the vehicle.

The Pivot Point for the Brake Disc/Drum (accessed under the hierarchy tab) must have the same Y & Z Axis position as that of the Wheel Nodes, otherwise you may find the entire suspension system offset from where it should be in-game.

The Brake Disc/Drum should be welded to its’ parent part – the relevant hub Mount. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.

If you have modelled disc brakes, then the ‘Brake Calliper’ will only need basic structure data, and to be welded to it’s parent part – the Hub.
____________________________
5-D-V] Wheels

Setting up the Wheels is no different to how we set-up the wheels in the level 1 tutorial. These must be parented to the brake disc/drum, and also welded to their parent.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:46 pm, edited 3 times in total.
Mad Mike on Tue Jan 01, 2019 12:25 pm
Post
Level 3 - Chapter 6 - (MacPherson) Strut Suspension
Part 3

________________________________________________________________________________________________
5-E] Extra Parts

These parts are not required to get the suspension system working, but are necessary in completing the look of the suspension system.
____________________________
5-E-i] Upper Strut / Shock Absorber / Upper Damper

Since the lower half of the Shock Absorber/Damper is merged into the 'Strut Hub'. You only need to manually animate the upper half of the shock/damper. This should be parented to the wishbone mount. It is very important that the pivot point for this is correctly set to where it connects to it’s parent part.

If the shock absorber is not vertical, then the Pivot Point also need to be rotated to match that rotation. Additionally the Pivot Point needs to be rotated by an additional 180 degrees in the Z Axis (known as the Y Axis in 3ds max) to make sure that the 'Local Y Axis' of the Shock absorber points down towards the 'Strut Hub's pivot point.
Image
Image

You will need to create position helpers/PH at the pivot point and the end point of the Upper-strut/Upper-damper.

In addition to basic structure data. You will then need to make use of two ‘Point-to-Point’ Animations.
  • SnapPointToPointOnOtherPart() – Snaps Pivot Point to Wishbone Mount at the same point
  • RotatePointToPointOnOtherPart() -Rotate End Point of This Half to where the lower half of the shock is connected to on the 'Strut Hub'

Lastly the Upper-strut/Upper-damper will need to be welded to it’s parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
5-E-ii] Coil Springs

The Coil Springs will need to be parented to the Upper-strut/Upper-damper. The Pivot Point will need to be set-up in the same way as it is for Upper-strut/Upper-damper. You will need to create two position helpers. One at the centre of the top of the coil spring, and the Second at the centre of the bottom of the coil spring. In this case, the end of the coil spring is set to the end point of the Upper-strut/Upper-damper to simplify the number of position helpers required.

Image

In addition to basic structure data, you will need to make use of two ‘Point-to-Point Animation’s. One of which needs to be set to a ‘RotatePointToPointOnOtherPartWithScaling()’.
  • SnapPointToPointOnOtherPart() – Snaps Pivot Point of Coil Spring to Upper-strut/Upper-damper at the same point
  • RotatePointToPointOnOtherPartWithScaling() – Rotate and scale the End point of the Coil Spring to The 'Strut Hub' at the same point
Lastly, the Coil Spring should be welded to its’ parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.

________________________________________________________________________________________________
5-F] Differences for Rear Suspension (Hubs)

When modelling Macpherson Strut suspension for rear suspension, there will be some minor differences in how the parts should be modelled.
____________________________
5-F-I] Modelling different attach points on hub (hinges rather than ball joints)

Non-steering (Rear wheel) Hubs on Macpherson Strut suspension will be modelled slightly differently to the front hubs. On a Hub that is used for steering, it is connected to the wishbone via ball joints and would be modelled that way. But on a hub that is not used for steering, it is connected via hinges, so adapt the model accordingly.
____________________________
5-F-ii] Driveshafts/UJs

To be covered briefly in the powertrain section. For Macpherson Strut suspension, you will need to break the driveshaft down to a total of four parts for each corner on a Macpherson Strut suspension setup.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:30 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:26 pm
Post
Level 3 - Chapter 7
Steering Rack & Tie Rods

________________________________________________________________________________________________
7-A] Required Parts
____________________________
5-A-i] Steering Rack

The Steering Rack translates the Radial turning of the steering column into a linear movement of the tie/track rods. You can see an example of the steering rack in the image below.
____________________________
5-A-ii] Tie/Track Rods

The Tie Rods are part of the steering system, where the Radial turning of the steering column is turned into a linear movement of the Inner tie/Track rods, and the outer tie will then rotate between the Inner Tie/Track Rods and the Hub. You can see examples of the Tie/Track Rods in the image below.

Below is a colour coded image, showing all of the requisite parts listed above.
  • Steering Rack (Red: 255,000,000)
  • Hubs (Orange: 255,102,000) For reference only
  • Inner Tie Rods (Yellow: 255,255,000)
  • Outer Tie Rods (Green: 000,255,000)
Image
________________________________________________________________________________________________
7-B] Typical Hierarchy

Below you can see the hierarchy from this steering rack. The parts ‘StrShaft0’ & ‘StrShaft1’ are the input shafts from the steering column.
Image

________________________________________________________________________________________________
7-C] Part Setup
____________________________
7-C-i] Steering Rack

The Steering Rack does not require much in the way of setup. It just needs basic structure data and to be welded to its’ parent part, in this case that is the chassis. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
7-C-ii] Outer Tie Rod

The Outer Tie Rods’ pivot point needs to be set at the point where it meets the inner tie rod, as per the image below.
Image

In Addition to the basic structure data, the Outer Tie Rod will need to be assigned the appropriate “LEFT_STEERING” or “RIGHT_STEERING” Physics property depending on which side of the car this Tie Rod is.

To Animate the Outer Tie Rod, we will need to use a ‘SnapPointToPointOnOtherPart()’ and a ‘RotatePointToLineOnOtherPart’ function.

Positions of Position Helpers

Before adding the animations, you can see all of the relevant position helpers (the Crosses) that will be needed for animating the Outer and Inner Tie Rods below, colour coded as follows
  • Steering Rack Centre (Red: 255,000,000)
  • Outer Tie Rod To Hub (Orange: 255,102,000)
  • Inner Tie Rod to Steering Rack (Yellow: 255,255,000)
  • Inner Tie Rod to Outer Tie Rod (Green: 000,255,000)
  • Steering X Vector (Black: 000,000,000)
NOTE: When setting up the steering for the right side, you will need a separate set of position helpers for the tie rods on that side
Image

‘SnapPointToPointOnOtherPart()’

The Outer Tie Rod will need to snap to the point where it meets the hub, so you will need a position helper where the Outer Tie Rod meets the Hub. Then, add the ‘SnapPointToPointOnOtherPart()’ animation using ‘tools’ -> ‘car’ -> ‘Point-To-Point Animation’, and set the Animation up appropriately.
  • ‘Point on this object’ – Set to the position where the Outer Tie Rod meets the hub
  • ‘Other Object’ – The Hub
  • ‘Point on Other Object’ – Set to the position where the Outer Tie Rod meets the hub

‘RotatePointToLineOnOtherPart’

The ‘RotatePointToLineOnOtherPart’ function requires a little more work and will need multiple Position-Helpers/PHs’ to complete the part setup for the Outer Tie Rod
  • 1 PH where the Outer Tie Rod meets the Inner Tie Rod
  • 1 PH at the centre of the Steering Rack
  • 1 PH offset by 1.0 Units in the X Axis from the Centre of the steering Rack

Add the ‘RotatePointToLineOnOtherPart()’ animation using ‘tools’ -> ‘car’ -> ‘Point-To-Point Animation’, and set change the animation type in the drop-down to match. Now to set the animation up:
  • The ‘Point on this object’ is the point on this part that will be rotated to meet the line on the ‘Other Object’
    For the Outer Tie Rod, this point is the ‘Inner Tie Rod to Outer Tie Rod’ Position Helper
  • The ‘Other Object’ is the part we are referencing a line from to rotate this this part to
    For the Outer Tie Rod, this is the Steering Rack
  • The ‘Point on other Object’ is a point which the line passes through
    For the Outer Tie Rod, this point is the ‘Steering Rack Centre’ Position Helper
  • The ‘Line Target’ is defines the vector in which the line is drawn
    For the Outer Tie Rod, this point is the ‘Steering X Vector’. This position helper must be offset from the ‘Steering Rack Centre’ by 1.0 units in the X axis
Lastly, the Outer Tie Rod should be welded to its’ parent part – the steering rack. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
7-C-iii] Inner Tie Rod

The Inner Tie Rods’ pivot point needs to be set at the point where it ends inside the Steering Rack, as per the image below. Remember that the tie rods will slide in and out of the steering rack, so the inner tie rods need to be long enough so that they do not completely slide out of the steering rack.
Image
In Addition to the basic structure data, the Inner Tie Rod will need to be assigned the appropriate “LEFT_STEERING” or “RIGHT_STEERING” Physics property depending on which side of the car this Tie Rod is.

To Animate the Inner Tie Rod, we will need to use a ‘SnapPointToPointOnOtherPart()’ and a ‘RotatePointToLineOnOtherPart’ function. These will be setup almost identical to the animations on the Outer Tie Rod.

‘SnapPointToPointOnOtherPart()’

The Inner Tie Rod will need to snap to the point where it meets the Outer Tie Rod, so you will need to use the position helper where the Outer and Inner Tie Rods meet in the ‘SnapPointToPointOnOtherPart()’ animation. Add the animation using ‘tools’ -> ‘car’ -> ‘Point-To-Point Animation’, and set the Animation up appropriately.
  • ‘Point on this object’ – Set to the position where the Inner Tie Rod meets the Outer Tie Rod
  • ‘Other Object’ – The Outer Tie Rod
  • ‘Point on Other Object’ – Set to the position where the Inner Tie Rod meets the Outer Tie Rod

‘RotatePointToLineOnOtherPart()’

The ‘RotatePointToLineOnOtherPart’ animation for the Inner Tie Rod will be set up very similarly to the ‘RotatePointToLineOnOtherPart’ animation on the Outer Tie Rod. Add the ‘RotatePointToLineOnOtherPart()’ animation using ‘tools’ -> ‘car’ -> ‘Point-To-Point Animation’, and set change the animation type in the drop-down to match. Now to set the animation up:

  • The ‘Point on this object’
    For the Inner Tie Rod, this point is the ‘Inner Tie Rod to Steering Rack’ Position Helper
  • The ‘Other Object’
    For the Inner Tie Rod, this is the Steering Rack
  • The ‘Point on other Object’
    For the Inner Tie Rod, this point is the ‘Steering Rack Centre’ Position Helper
  • The ‘Line Target’
    For the Inner Tie Rod, this point is the ‘Steering X Vector’. This position helper must be offset from the ‘Steering Rack Centre’ by 1.0 units in the X axis

Lastly, the Inner Tie Rod should be welded to its’ parent part – the steering rack. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
7-C-iii] Extra Parts

When setting up a steering rack, you might want to add the input shafts that depict the transmission of the rotation through the steering column to the steering rack. Below you can see the two shafts used on the tutorial car.

Image

It is important that the input shafts’ pivot points are set to the centre of the shafts and rotated where necessary. Below you can see an example of this on the second shaft.

Image

In addition to the basic structure data, the steering input shafts only require a ‘standard animation’, accessed under ‘tools’ -> ‘Car’. This needs to be set to ‘Rotate’ in the appropriate local axis (usually the Z axis), and the ‘degree’ value will need to be set to a negative value (-1, -2, -3, etc). This will need to match the rotation of your steering wheel to look correct.

Lastly, the Input shafts should be welded to their parent part – the steering rack. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:38 pm, edited 1 time in total.
Mad Mike on Tue Jan 01, 2019 12:26 pm
Post
Level 3 - Chapter 8
Powertrain/Drivetrain


________________________________________________________________________________________________
Unless otherwise stated in the setup information for each part, all mechanical parts typically have the following main settings

Quote:
Render Level:
  • Set at 3, unless part is very large or on clear display (Axle, Engine)
Basic Settings:
  • Enable Crushability and set to 0.0

________________________________________________________________________________________________
8-A] Transmission to Live Axle or Differential

There are lots of options for visually animating the powertrain of a vehicle in Carmageddon Max Damage. To represent the transmission of power from either a Transmission or Transfer box, to a Differential (Live Axle or independent suspension), You will need three model parts.
____________________________
8-A-i] Parts Required

UJ (Transmission or Transfer Box)

As covered in the Live Axle Tutorial, you will need a part representing a Universal-Joint/UJ, and this needs to be attached to your transmission or transfer box. Like below.
Image
____________________________
UJ (Differential or Live Axle)

As covered in the Live Axle Tutorial, you will need a part representing a Universal-Joint/UJ, and this needs to be attached to your Live Axle, or differential if you’ve modelled Double Wishbone or Macpherson Strut suspension. Like below.

Image
____________________________
Driveshaft

Bridging the gap between both universal joints will be the driveshaft. Like below
Image
____________________________
8-A-ii] Typical Hierarchy

Typically, the UJ attached to the live axle or differential is parented & welded to that part. The UJ & Driveshaft attached to the Transmission or Transfer box are typically parented & welded to the Transmission or Transfer box.

Do NOT parent the driveshaft to the universal joint! Otherwise it will inherit any transformations applied to the UJ.
____________________________
8-A-iii] Part Setup

8-A-iii-1] UJ (Transmission or Transfer Box)

Setting up a universal joint here is identical to the UJ setup mentioned in the Live Axle setup tutorial. The pivot point must be set to the centre of the shaft.

In addition to basic structure data, you will need to assign a ‘Standard Animation’ (accessed via ‘Tools’ -> ‘Car’). This will need to be set to rotate by 1 degree in the Local Z axis, using the ‘GEARBOX_OUTPUT_ANGLE’ animation controller.
Image
Lastly, the UJ should be welded to its’ parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
8-A-iii-2] UJ (Differential or Live Axle)

Same as the setup process mentioned above.
____________________________
8-A-iii-3] Driveshaft

Setting up the driveshaft requires everything mentioned in the setup for the universal joint/s mentioned above (including rotating the rotation in the local Z axis). It also requires the use of two ‘Point-to-Point Animations’ to get the driveshaft to rotate and stay with the Live Axle as the suspension compresses and rebounds.

It is very important that the driveshafts’ pivot-point is not just set at the centre of the shaft, but also at the point where it meets the universal joint, see below for reference.
Image

You will need to place a position helper where the Driveshaft meets the UJ on the Transmission and another position helper where the Driveshaft meets the UJ on the Axle. See below for reference.
Image

Next you will need two 'Point to Point Animations' (Accessed via ‘Tools -> ‘Car’).

‘SnapPointToPointOnOtherPart()’
  • ‘Point on This Part’ – Position Helper where the Driveshaft meets the UJ on the Transmission (Orange)
  • ‘Other Object’ – UJ attached to transmission, or the transmission itself
  • ‘Point on Other Part’- Position Helper where the Driveshaft meets the UJ on the Transmission (Orange)

‘RotatePointToPointOnOtherPart()’
Don’t forget to change the animation type in the dropdown to Rotate instead of snap.
  • ‘Point on This Part’ – Position Helper where the Driveshaft meets the UJ on the Axle (Green)
  • ‘Other Object’ – UJ attached to Axle, or the Axle itself
  • ‘Point on Other Part’- Position Helper where the Driveshaft meets the UJ on the Axle (Green)

Pen ultimately. Add the same 'Standard Animation' applied earlier to both of the Universal-Joints/UJs

Lastly, the Driveshaft should be welded to its’ parent part (Transmission or transfer box). The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
________________________________________________________________________________________________
8-B] Differential to Independant Suspension (Wishbone or Strut)
____________________________
8-B-i] Parts Required

When you've got a vehicle with independent suspension that is powered, the process of depicting the transmission of power from the Differential to the Hub requires a total of four parts, 4 x Driveshaft/s ending with Universal Joints:
  • 1 To be attached to the differential
  • 1 To be attached to the Hub
  • 2 will form the longer driveshaft that will have to move to stay connected (to the above) as the suspension compresses and extends

Below you can see a visual representation of these (Wireframes highlighted in white). If the two shafts that form the main driveshaft are at an angle, ideally make sure it is an integer value and keep a record of it, as it will affect the pivot points.
Image
____________________________
8-B-ii] Typical Hierarchy

The Driveshaft/UJ attached to the differential and the first half of the long driveshaft should be parented to the differential. The other UJ and half of the driveshaft should be parented to the Hub. Do NOT parent driveshafts' to one another, otherwise they will inherit animations from their parent.
____________________________
8-B-iii] Part Setup

It is very important that the pivot point for all parts are set at the centre of the shafts. For the the two longer driveshaft parts, which may be at an angle, the pivot points must also be rotated by that same value and be set at the end of the shaft where it meets its respective UJ. Below you can see a visual representation of this.
Image

Driveshaft Rotation Animation
In addition to basic structure data. All four of the these parts will need to be a assigned a 'Standard Animation' (accessed via 'Tools -> 'Car')
  • 'Animation Type' should be set to "Rotate"
  • 'Local Axis' Should be set to "X"
  • 'Controller' should be the relevant "WHEEL_ROTATION_XX" animation controller, where "XX" is the wheel for that corner.
  • 'Degree' value should be left at "1.0"

Point-To-Point Animation
Furthermore, the two longer shafts will each need to make use of a 'SnapPointToPointOnOtherPart()' and a 'RotatePointToPointOnOtherPart()' function. Below you can see the position helpers that are going to be used for the 'Point-to-Point Animations' (Highlighted in Blue). One is at each shafts' pivot-point, the other at each shafts' end point.
Image

The 'Point-To-Point Animation's on each shaft will be set up as follows
  • 'SnapPointToPointOnOtherPart()' - Snap Pivot Point of this shaft to UJ at same point
  • 'RotatePointToPointOnOtherPart()' - Rotate End Point of this shaft to other half of Driveshaft at its' Pivot Point

Lastly, all four shafts should be welded to their parent parts. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.

Closing Note:
There seems to be a bug in Carmageddon Max Damage, where driveshafts that make use of two point to point functions (Examples: Transmission to Live Axle, or Differential to Hub [Independent suspension]), will not spin, even if configured correctly.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:46 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:27 pm
Post
Level 3 - Chapter 9
Example Engine

________________________________________________________________________________________________
When setting up your engine, there are a few animations that can be added to it and its child parts to improve its appearance in-game.

Unless otherwise stated in the setup information for each part, all mechanical parts typically have the following main settings

Quote:
Render Level:
  • Set at 3, unless part is very large or on clear display (Axle, Engine)
Basic Settings:
  • Enable Crushability and set to 0.0

____________________________
9-A] Engine Pulleys & Radiator Fan

If you have separated out your radiator fan, and the pulleys that the fan belts run between from the base engine model. You can animate these using a rotation linked to “ENGINE_CRANK_ANGLE”.

It is important that each pulley & the fans’ pivot-points are set to the centre of their respective shafts. These pulleys & the radiator fan must then be set as child objects of the engine.

In addition to the standard structure data, each pulley will need to be assigned the rotation through ‘Tool’ -> ‘Car’ -> ‘Standard Animation’.
  • ‘Animation Type’ should default to rotate
  • ‘Local axis’ must be set to Z
  • ‘Degree’ value should be left at 1.0 for the crank pulley, the ‘degree’ value on other pulleys may vary if they are smaller in diameter.
    // For example, if your alternator pulley is half the size of the crank pulley, then increase the ‘degree’ value to 2.0
  • ‘Controller’ should be set to “ENGINE_CRANK_ANGLE”

Lastly, all pulleys and the radiator fan should be welded to their parent part. In the case of the Tutorial car, which has a mechanical (Crank Driven) Radiator fan, all pulleys & the fan are welded to the Engine. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
____________________________
9-B] Engine Vibration

In addition to animating the pulleys & the fan. You can animate the entire engine block with a ‘vibrate’ animation that mimics the rumbling/rocking of an engine as it rev’s up in the real world.

Ideally, for the most realistic appearance - the engines pivot point should be set so that it has the same Y Axis position (Z axis in 3ds max) as where the centre of the crankshaft would be.

In addition to the standard structure data we set for the engine model in the level 1 tutorial, assign a ‘Standard Animation’ through ‘Tool’ -> ‘Car’ -> ‘Standard Animation’. Change the ‘Animation Type’ to ‘Vibrate’.
  • ‘Local Axis’ should be set to ‘Z’
  • ‘Controller’ should be set to “ENGINE_NORMALISED_RPM”

You will notice another set of variables are now available to enter.
  • ‘Centre of Rotation’ is the point about which the animation originates.
    // You can select the engine model for this, or create a position helper at the Pivot Point of the Engine and reference that instead. It’s your choice
  • ‘Min Frequency’ is the minimum amount of times the animation can be triggered
    // Value used on the official cars is typically 1.0
  • ‘Max Frequency’ is the maximum amount of times the animation can be triggered
    // Value used on the official cars is typically 50.0
  • ‘Random Freq’ is a psuedo-random value intended to randomize the frequency
    // Value used on the official cars is typically 0.5
  • ‘Min Amplitude’ is the minimum amount of amplitude (displacement) applied by the animation
    // Value used on the official cars is typically 0.25
  • ‘Max Amplitude’ is the maximum amount of amplitude (displacement) applied by the animation
    // Value used on the official cars is typically 0.5
  • ‘Random Amp’ is a psuedo-random value intended to randomize the amplitude
    // Value used on the official cars is typically 0.25

Experiment with the above values to tweak the animation to your liking.

Lastly, as covered in the Level 1 Tutorial - don't forget to weld your engine to its' parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:46 pm, edited 2 times in total.
Mad Mike on Tue Jan 01, 2019 12:27 pm
Post
Level 3 - Chapter 10
Animated Steering wheel

________________________________________________________________________________________________
To improve the appearance of the driver inside the car. You will want them to hold onto the steering wheel and have it animated.

The Steering wheel typically has the following main settings

Quote:
Render Level:
  • Set at 2,
Basic Settings:
  • Enable Crushability and set to 0.0


____________________________
10-A] Steering Wheel Pivot

The steering wheel will need to be separated out from the rest of the steering column, and should be parented to the root of the vehicle (c_Body). The Pivot Point for the Steering Wheel (accessed via the hierarchy tab) must be at the centre of the wheel. Additionally, If your steering wheel is at an angle, then the pivot point must also be rotated, see below for reference.
Image
____________________________
10-B] Physics Property

In addition to the basic structure data. I would recommend that the ‘Render Level’ for the steering wheel is set at 2 instead of 3. You will also need to assign the physics property of “STEERING_WHEEL” to the steering wheel. This will get the driver model to try and grip the steering wheel in-game. If the driver cannot reach the wheel, then you may need to adjust your driver position.
____________________________
10-C] Animation

To animate the steering wheel, you will need to assign a ‘Standard Animation’ through ‘Tool’ -> ‘Car’ -> ‘Standard Animation’.
  • ‘Animation Type’ needs to be left as ‘Rotate’
  • ‘Local Axis’ Should be set to Z
  • ‘Degree’ Value should be a negative value and match that of your steering input shafts on the steering rack (if present).
    // Remember that the wheel will rotate this number of degrees per 1 degree of steering angle. If the wheel Rotates too far, then the drivers arms will twist and clip through one another. Typically I aim for a maximum wheel rotation of 90-120 degrees, which means a ‘Degree’ Value of ‘-3’ when the maximum steering angle defined in the car setup is between 30-40 degrees.

Lastly, don’t forget to weld the Steering Wheel to its’ parent part. The weld vertex/vertices do NOT have to meet an actual vertex on the parent part.
________________________________________________________________________________________________
Level 3 - The End – Game Over

That's all Folks. The Level 3 Tutorial Car, now christened the 'Paralyser Grand Prick' is now complete.

Image
Image
Image
One man... Alone... Wrecking opponents in the Automobile he loves.
Twitter Manifestation. - Mods for Max Damage.


Last edited by Mad Mike on Tue Jan 01, 2019 2:45 pm, edited 1 time in total.
Pages:  1, 2  >>



cron
Extra information
It is currently Mon Jan 21, 2019 11:46 am,

Please Register a username.
In total there are 2 users online :: 0 registered, 0 hidden and 2 guests
Users browsing this forum: No registered users and 2 guests
Moderator: coffeycup

Powered by phpBB :: Hosted by n3wton :: Molested by goats
CWA Links
Facebook