This week I’ve been doing some of my own rFactor modding. The program files which control car physics are editable allowing you to tweak or completely modify the handling characteristics for any vehicle. Some notepad examples below.
The developers of the game - Image Space Incorporated - also released a set of public development tools for modifying the game and some useful information on file structure so you don’t need to figure it out. Lots of helpful remarks too!
//
// This is the high-detail vehicle parameter file.
// It is pointed to by one or more *.veh files.
//
// Any range has the following values: (minimum, step size, number of steps)
// Any setting refers to the step from 0 to <number of steps - 1>.
//
// Everything is in SI units (kg, m, kPa, N, etc.), except:
// Engine speed is measured in RPM.
// Angles are measured in degrees.
//
// +x = left
// +y = up
// +z = rear
//
// Pushrod connections are adjusted from the values found in this file
// based on the graphical location of the wheels. If the graphical location
// does not match the physical location (found in a .pm file), then all
// suspension joints (including the pushrods) are adjusted to match the
// graphical locations. It should be noted that suspension joints are also
// adjusted after setting the camber, caster, and toe-in.
//
// The "reference plane" is equal to the ride height. Note that we have
// added a graphical offset because some stock car series measures the ride heights
// to the frame of the car, but the bodywork hangs about an inch lower (especially
// at the air dam). The graphical offset does not affect the physics in any
// way, just the appearance of how far the vehicle is off the ground. Note
// that the "undertray" points are where the vehicle bottoms out.
//
// Aerodynamic variables:
// Lift is negative downforce
//
[GENERAL]
Rules=0 // what rules to apply to garage setups (0=none, 1=stock car)
GarageDisplayFlags=34 // how settings are displayed in garage (add): 1=rear downforce value (vs. angle), 2=radiator (vs. grille tape), 4=more gear info, 8+16=front downforce/wing/splitter/air dam, 32+64=rear downforce/wing/spoiler
Mass=1565.5 // all mass except fuel (1487.3+78.2kg driver)
Inertia=(2400.0, 2730.0, 520.0) // all inertia except fuel
FuelTankPos=(0.00, 0.18,-0.21) // location of tank relative to center of rear axle in reference plane
FuelTankMotion=(150.0, 0.25) // simple model of fuel movement in tank (spring rate per kg, critical damping ratio)
Notes=""
Symmetric=1
DamageFile=damage // .ini file to find physical and graphical damage info
CGHeight=0.320 // height of body mass (excluding fuel) above reference plane
CGRightRange=(0.495, 0.005, 1) // fraction of weight on left tires
CGRightSetting=0
CGRearRange=(0.480, 0.005, 1) // fraction of weight on rear tires
CGRearSetting=0
WedgeRange=(0.0, 0.25, 1) // rounds of wedge
WedgeSetting=0
WedgePushrod=0.0 // each round of wedge changes rear-left jacking screw by this amount (0.0 to disable, use Rules to allow FR ride height)
GraphicalOffset=(0.0, 0.0, 0.0) // does not affect physics! This just moves the vehicle body for whatever reasons you may have.
Undertray00=( 0.50, 0.0, -1.50) // corner offset from center of wheels in reference plane
Undertray01=(-0.50, 0.0, -1.50) // corner offset from center of wheels in reference plane
Undertray02=( 0.50, 0.0, 1.50) // corner offset from center of wheels in reference plane
Undertray03=(-0.50, 0.0, 1.50) // corner offset from center of wheels in reference plane
Undertray04=( 0.78, 0.0, -0.80)
Undertray05=(-0.78, 0.0, -0.80)
Undertray06=( 0.78, 0.0, 1.00)
Undertray07=(-0.78, 0.0, 1.00)
Undertray08=( 0.78, 0.0, 0.00)
Undertray09=( 0.00, 0.0, 0.00)
Undertray10=(-0.78, 0.0, 0.00)
UndertrayParams=(300000.0,15000.0,2.5) // spring/damper/friction
TireBrand=ESP_Tires_lvl1 // must appear before tire compound setting (references *.tbc file)
FrontTireCompoundSetting=0 // compound index within brand
RearTireCompoundSetting=0 // compound index within brand
FuelRange=(1.0, 1.0, 60)
FuelSetting=39
NumPitstopsRange=(0, 1, 4)
NumPitstopsSetting=3
Pitstop1Range=(1.0, 1.0, 60)
Pitstop1Setting=39
Pitstop2Range=(1.0, 1.0, 60)
Pitstop2Setting=39
Pitstop3Range=(1.0, 1.0, 60)
Pitstop3Setting=39
AIAimSpeedsPerWP=(25.0, 35.0, 45.0, 55.0, 70.0, 90.0, 110.0, 140.0) // speeds at which to look ahead X waypoints (spaced roughly 5 meters apart)
AICornerReductionBase=70.0 // (pointspeed/this number)= % deceleration we can expect through a point
AIMinPassesPerTick=3 // minimum passes per tick (can use more accurate spring/damper/torque values, but takes more CPU)
AIRotationThreshold=0.20 // rotation threshold (rads/sec) to temporarily increment passes per tick
AIEvenSuspension=0.0 // averages out spring and damper rates to improve stability (0.0 - 1.0)
AISpringRate=1.0 // spring rate adjustment for AI physics
AIDamperSlow=0.5 // contribution of average slow damper into simple AI damper
AIDamperFast=0.5 // contribution of average fast damper into simple AI damper
AIDownforceZArm=0.150 // hard-coded center-of-pressure offset from vehicle CG
AIDownforceBias=0.0 // bias between setup and hard-coded value (0.0-1.0)
AITorqueStab=(1.0, 1.0, 0.6) // torque adjustment to keep AI stable
FeelerFlags=0 // how collision feelers are generated (add): 1=box influence 2=reduce wall-jumping 4=allow adjustment hack 8=top directions
FeelerOffset=(0.0, 0.0, 0.0) // offset from cg to use when generating feelers
FeelersAtCGHeight=1 // whether corner and side feelers are automatically adjusted to CG height
FeelerFrontLeft=( 0.865,0.350,-1.905) // front-left corner collision feeler
FeelerFrontRight=(-0.865,0.350,-1.905) // front-right corner collision feeler
FeelerRearLeft=( 0.840,0.350,2.235) // rear-left corner collision feeler
FeelerRearRight=(-0.840,0.350,2.235) // rear-right corner collision feeler
FeelerFront=(0.000,0.350,-2.025) // front side collision feeler
FeelerRear=( 0.000,0.350, 2.380) // rear side collision feeler
FeelerRight=(-0.932,0.350,-0.247) // right side collision feeler
FeelerLeft=( 0.932,0.350,-0.247) // left side collision feeler
FeelerTopFrontLeft=(-0.570,1.135,0.300) // top front-left collision feeler
FeelerTopFrontRight=(0.570,1.135,0.300) // top front-right collision feeler
FeelerTopRearLeft=(-0.660,0.950,1.323) // top rear-left collision feeler
FeelerTopRearRight=(0.660,0.950,1.323) // top rear-right collision feeler
FeelerBottom=(0.000,0.100,0.000) // bottom feeler
[BODYAERO]
BodyDragBase=(0.406) // base drag
BodyDragHeightAvg=(0.198) // drag increase with average ride height
BodyDragHeightDiff=(0.420) // drag increase with front/rear ride height difference
BodyMaxHeight=(0.23) // maximum ride height that affects drag/lift
BodyLeft=(-0.85, 0.3, 0.0) // aero forces from moving left
BodyRight=(0.85, 0.3, 0.0) // aero forces from moving right
BodyUp=( 0.00,-1.5, 0.0) // aero forces from moving up
BodyDown=( 0.00, 1.5, 0.0) // aero forces from moving down
BodyAft=( 0.00, 0.45,-0.85) // aero forces from moving rearwards
BodyFore=( 0.00, 0.11, 0.400) // aero forces from moving forwards (lift value important, but drag overwritten)
BodyRot=( 5.00, 3.33, 2.50) // aero torque from rotating
BodyCenter=(0.0, 0.43,-1.267) // center of body aero forces (offset from center of rear axle at ref plane)
RadiatorRange=(100.0, -5.0, 1) // radiator range (front grille tape)
RadiatorSetting=0 // radiator setting
RadiatorDrag=(0.010) // effect of radiator setting on drag
RadiatorLift=(0.010) // effect of radiator setting on lift
BrakeDuctRange=(0.0, 1.0, 1) // brake duct range
BrakeDuctSetting=0 // brake duct setting
BrakeDuctDrag=(0.005) // effect of brake duct setting on drag
BrakeDuctLift=(0.008) // effect of brake duct setting on lift
[DIFFUSER]
DiffuserBase=(-0.000, -0.1, 1.0) // base lift and 1st/2nd order with rear ride height
DiffuserFrontHeight=(0.005) // 1st order with front ride height
DiffuserRake=( 0.000, -1.0, 3.9) // optimum rake (rear - front ride height), 1st order with current difference from opt, 2nd order
DiffuserLimits=(0.010, 0.15, 0.06) // min ride height before stalling begins (0.0=disabled), max rear ride height for computations, max rake difference for computations
DiffuserStall=(0.1, 0.60) // function to compute stall ride height (0.0=minimum, 1.0=average), downforce lost when bottoming out (0.0=none, 1.0=complete stall)
DiffuserSideways=(0.35) // dropoff with yaw (0.0 = none, 1.0 = max)
DiffuserPeakYaw=(0.0, 1.0) // angle of peak, multiplier at peak
DiffuserCenter=(0.0, 0.01,-1.240) // center of diffuser forces (offset from center of rear axle at ref plane)
[SUSPENSION]
PhysicalModelFile=ESP_susp.pm
CorrectedInnerSuspHeight=0.175 // instead of moving inner susp height relative with ride height, use this offset (set to -1 for original behavior)
ApplySlowToFastDampers=0 // whether to apply slow damper settings to fast damper settings
AdjustSuspRates=0 // adjust suspension rates due to motion ratio (0 = direct measure of spring/damper rates, 1 = wheel rates)
AlignWheels=1 // correct for minor unintentional graphical offsets
CenterWheelsOnBodyX=0 // correct for minor unintentional graphical offsets
FrontWheelTrack=1.5333 // if non-zero, forces the front wheels to be specified track width
RearWheelTrack=1.5167 // if non-zero, forces the rear wheels to be specified track width
LeftWheelBase=2.6842 // if non-zero, forces the left side to use specified wheelbase
RightWheelBase=2.6842 // if non-zero, forces the right side to use specified wheelbase
SpringBasedAntiSway=0 // 0=diameter-based, 1=spring-based
AllowNoAntiSway=1 // Whether first setting gets overridden to mean no antisway bar
FrontAntiSwayRange=(0.0234, 0.002, 2)
FrontAntiSwaySetting=1
FrontAntiSwayRate=(1.11e11, 4.0) // (base, power), so rate = base * (diameter in meters ^ power)
RearAntiSwayBase=0.0 // extra anti-sway from tube twisting
RearAntiSwayRange=(0.014, 0.001, 1)
RearAntiSwaySetting=0
RearAntiSwayRate=(1.11e11, 4.0) // (base, power), so rate = base * (diameter in meters ^ power)
FrontToeInRange=(-0.10, 0.05, 1)
FrontToeInSetting=0
RearToeInRange=( 0.10, 0.05, 1)
RearToeInSetting=0
LeftCasterRange=( 4.0, 0.1, 1) // front-left caster
LeftCasterSetting=0
RightCasterRange=(4.0, 0.1, 1) // front-right caster
RightCasterSetting=0
[CONTROLS]
SteeringFFBMult=1.1 // vehicle-specific multiplier by steering force feedback
SteerLockRange=(5.0, 0.5, 66)
SteerLockSetting=30
RearBrakeRange=(0.380, 0.01, 1)
RearBrakeSetting=0
BrakePressureRange=(0.50, 0.05, 11) // brake pressure
BrakePressureSetting=8
HandbrakePressRange=(0.0, 0.10, 11) // handbrake pressure
HandbrakePressSetting=8
AutoUpshiftGripThresh=0.63 // auto upshift waits until all driven wheels have this much grip (reasonable range: 0.4-0.9)
AutoDownshiftGripThresh=0.63 // auto downshift waits until all driven wheels have this much grip (reasonable range: 0.4-0.9)
TractionControlGrip=(1.01, 0.18) // average driven wheel grip multiplied by 1st number, then added to 2nd
TractionControlLevel=(0.30, 0.80) // effect of grip on throttle for low TC and high TC
ABS4Wheel=1 // 0 = old-style single brake pulse, 1 = more effective 4-wheel ABS
ABSGrip=(1.00, 0.20) // grip multiplied by 1st number and added to 2nd
ABSLevel=(0.30, 0.90) // effect of grip on brakes for low ABS and high ABS
OnboardBrakeBias=0 // whether brake bias is allowed onboard
[ENGINE]
Normal=FordV8_Engine // unrestricted engine
RestrictorPlate=FordV8_Engine // restrictor plate engine
[DRIVELINE]
ClutchInertia=0.0280
ClutchTorque=675.0
ClutchWear=0.0
ClutchFriction=14.5
ClutchEngageRate=0.8 // how quickly clutch is engaged with auto-clutch driving aid
BaulkTorque=1200.0
AllowManualOverride=1 // whether to allow manual shift overrides when using auto shifting
SemiAutomatic=0 // whether throttle and clutch are operated automatically (like an F1 car)
UpshiftDelay=0.200 // delay in selecting higher gear (low for semi-automatic, higher for manual)
UpshiftClutchTime=0.150 // time to ease auto-clutch in AFTER upshift (0.0 for F1 cars)
DownshiftDelay=0.200 // delay in selecting lower gear (low for semi-automatic, higher for manual)
DownshiftClutchTime=0.225 // time to ease auto-clutch in AFTER downshift (used to be SemiAutoClutchTime)
DownshiftBlipThrottle=0.70 // amount of throttle used to blip if controlled by game (instead of player)
WheelDrive=REAR // which wheels are driven: REAR, FOUR (even torque split), or FRONT
GearFile=TremecT45_Gears.ini // Must come before final/reverse/gear settings!
AllowGearingChanges=0 // cannot change stock ratios until one buys a tranny upgrade
AllowFinalDriveChanges=0 // cannot change stock ratio until one buys a diff upgrade
FinalDriveSetting=2 // indexed into GearFile list
ReverseSetting=0
ForwardGears=5
Gear1Setting=1
Gear2Setting=2
Gear3Setting=3
Gear4Setting=4
Gear5Setting=5
DiffPumpTorque=250.0 // at 100% pump diff setting, the torque redirected per wheelspeed difference in radians/sec (roughly 1.2kph)
DiffPumpRange=(0.0,0.10,1) // differential acting on all driven wheels
DiffPumpSetting=0
DiffPowerRange=(0.30,0.25,1) // fraction of power-side input torque transferred through diff
DiffPowerSetting=0 // (not implemented for four-wheel drive)
DiffCoastRange=(0.20,0.25,1) // fraction of coast-side input torque transferred through diff
DiffCoastSetting=0 // (not implemented for four-wheel drive)
DiffPreloadRange=(30.0, 10.0, 1) // preload torque that must be overcome to have wheelspeed difference
DiffPreloadSetting=0 // (not implemented for four-wheel drive)
[FRONTLEFT]
BumpTravel=-0.0508 // suspension travel upwards
ReboundTravel=-0.254 // suspension travel downwards
BumpStopSpring=160000.0 // initial spring rate of bumpstop
BumpStopRisingSpring=1.20e7 // rising spring rate of same (multiplied by deflection squared)
BumpStopDamper=2000.0 // initial damping rate of bumpstop
BumpStopRisingDamper=9.00e5 // rising damper rate of same (multiplied by deflection squared)
BumpStage2=0.090 // speed where damper bump moves from slow to fast
ReboundStage2=-0.090 // speed where damper rebound moves from slow to fast
FrictionTorque=7.15 // Newton-meters of friction between spindle and wheel
SpinInertia=1.625 // inertia in pitch direction including any axle but not brake disc
CGOffsetX=0.000 // x-offset from graphical center to physical center (NOT IMPLEMENTED)
PushrodSpindle=(-0.120,-0.100, 0.00) // spring/damper connection to spindle or axle (relative to wheel center)
PushrodBody=( -0.220, 0.300, 0.00) // spring/damper connection to body (relative to wheel center)
CamberRange=(-0.8, 0.5, 1)
CamberSetting=0
PressureRange=(100.0, 1.0, 201)
PressureSetting=110
PackerRange=(0.000, 0.001, 1)
PackerSetting=0
SpringMult=1.00 // take into account suspension motion if spring is not attached to spindle (affects physics but not garage display)
SpringRange=(80000.0, 5000.0, 1)
SpringSetting=0
RideHeightRange=(0.140, 0.005, 1)
RideHeightSetting=0
DamperMult=1.00 // take into account suspension motion if damper is not attached to spindle (affects physics but not garage display)
SlowBumpRange=(5000.0, 250.0, 1)
SlowBumpSetting=0
FastBumpRange=(2500.0, 250.0, 1)
FastBumpSetting=0
SlowReboundRange=(7500.0, 500.0, 1)
SlowReboundSetting=0
FastReboundRange=(5000.0, 500.0, 1)
FastReboundSetting=0
BrakeDiscRange=(0.0254, 0.000, 1) // disc thickness
BrakeDiscSetting=0
BrakePadRange=(0, 1, 5) // pad type (not implemented)
BrakePadSetting=2
BrakeDiscInertia=1.550 // inertia per meter of thickness
BrakeOptimumTemp=270.0 // optimum brake temperature in Celsius (peak brake grip)
BrakeFadeRange=400.0 // temperature outside of optimum that brake grip drops to half (too hot or too cold)
BrakeWearRate=1.20e-013 // meters of wear per second at optimum temperature
BrakeFailure=(1.40e-002,7.40e-004) // average and variation in disc thickness at failure
BrakeTorque=3110.0 // maximum brake torque at zero wear and optimum temp
BrakeHeating=0.00100 // heat added linearly with brake torque times wheel speed (at max disc thickness)
BrakeCooling=(2.95e-002,4.20e-004) // minimum brake cooling rate (base and per unit velocity) (at max disc thickness)
BrakeDuctCooling=1.15e-004 // brake cooling rate per brake duct setting (at max disc thickness)
[FRONTRIGHT]
BumpTravel=-0.0508 // suspension travel upwards
ReboundTravel=-0.254 // suspension travel downwards
BumpStopSpring=160000.0 // initial spring rate of bumpstop
BumpStopRisingSpring=1.20e7 // rising spring rate of same (multiplied by deflection squared)
BumpStopDamper=2000.0 // initial damping rate of bumpstop
BumpStopRisingDamper=9.00e5 // rising damper rate of same (multiplied by deflection squared)
BumpStage2=0.090 // speed where damper bump moves from slow to fast
ReboundStage2=-0.090 // speed where damper rebound moves from slow to fast
FrictionTorque=7.15 // Newton-meters of friction between spindle and wheel
SpinInertia=1.625 // inertia in pitch direction including any axle but not brake disc
CGOffsetX=0.000 // x-offset from graphical center to physical center (NOT IMPLEMENTED)
PushrodSpindle=(0.120,-0.100, 0.00) // spring/damper connection to spindle or axle (relative to wheel center)
PushrodBody=( 0.220, 0.300, 0.00) // spring/damper connection to body (relative to wheel center)
CamberRange=(-0.8, 0.5, 1)
CamberSetting=0
PressureRange=(100.0, 1.0, 201)
PressureSetting=110
PackerRange=(0.000, 0.001, 1)
PackerSetting=0
SpringMult=1.00 // take into account suspension motion if spring is not attached to spindle (affects physics but not garage display)
SpringRange=(80000.0, 5000.0, 1)
SpringSetting=0
RideHeightRange=(0.140, 0.005, 1)
RideHeightSetting=0
DamperMult=1.00 // take into account suspension motion if damper is not attached to spindle (affects physics but not garage display)
SlowBumpRange=(5000.0, 250.0, 1)
SlowBumpSetting=0
FastBumpRange=(2500.0, 250.0, 1)
FastBumpSetting=0
SlowReboundRange=(7500.0, 500.0, 1)
SlowReboundSetting=0
FastReboundRange=(5000.0, 500.0, 1)
FastReboundSetting=0
BrakeDiscRange=(0.0254, 0.000, 1) // disc thickness
BrakeDiscSetting=0
BrakePadRange=(0, 1, 5) // pad type (not implemented)
BrakePadSetting=2
BrakeDiscInertia=1.550 // inertia per meter of thickness
BrakeOptimumTemp=270.0 // optimum brake temperature in Celsius (peak brake grip)
BrakeFadeRange=400.0 // temperature outside of optimum that brake grip drops to half (too hot or too cold)
BrakeWearRate=1.20e-013 // meters of wear per second at optimum temperature
BrakeFailure=(1.40e-002,7.40e-004) // average and variation in disc thickness at failure
BrakeTorque=3110.0 // maximum brake torque at zero wear and optimum temp
BrakeHeating=0.00100 // heat added linearly with brake torque times wheel speed (at max disc thickness)
BrakeCooling=(2.95e-002,4.20e-004) // minimum brake cooling rate (base and per unit velocity) (at max disc thickness)
BrakeDuctCooling=1.15e-004 // brake cooling rate per brake duct setting (at max disc thickness)
[REARLEFT]
BumpTravel=-0.0508 // suspension travel upwards
ReboundTravel=-0.2794 // suspension travel downwards
BumpStopSpring=160000.0 // initial spring rate of bumpstop
BumpStopRisingSpring=1.20e7 // rising spring rate of same (multiplied by deflection squared)
BumpStopDamper=2000.0 // initial damping rate of bumpstop
BumpStopRisingDamper=9.00e5 // rising damper rate of same (multiplied by deflection squared)
BumpStage2=0.090 // speed where damper bump moves from slow to fast
ReboundStage2=-0.090 // speed where damper rebound moves from slow to fast
FrictionTorque=7.95 // Newton-meters of friction between spindle and wheel
SpinInertia=1.925 // inertia in pitch direction including any axle but not brake disc
CGOffsetX=-0.030 // x-offset from graphical center to physical center (NOT IMPLEMENTED)
PushrodSpindle=(-0.170,-0.100, 0.00) // spring/damper connection to spindle or axle (relative to wheel center)
PushrodBody=( -0.200, 0.220, 0.00) // spring/damper connection to body (relative to wheel center)
CamberRange=(-0.3, 0.5, 1)
CamberSetting=0
PressureRange=(100.0, 1.0, 201)
PressureSetting=110
PackerRange=(0.000, 0.001, 1)
PackerSetting=0
SpringMult=1.0 // take into account suspension motion if spring is not attached to spindle (affects physics but not garage display)
SpringRange=(65000.0, 5000.0, 1)
SpringSetting=0
RideHeightRange=(0.150, 0.005, 1)
RideHeightSetting=0
DamperMult=1.00 // take into account suspension motion if damper is not attached to spindle (affects physics but not garage display)
SlowBumpRange=(4200.0, 250.0, 1)
SlowBumpSetting=0
FastBumpRange=(2100.0, 250.0, 1)
FastBumpSetting=0
SlowReboundRange=(8000.0, 500.0, 1)
SlowReboundSetting=0
FastReboundRange=(4200.0, 500.0, 1)
FastReboundSetting=0
BrakeDiscRange=(0.0254, 0.000, 1) // disc thickness
BrakeDiscSetting=0
BrakePadRange=(0, 1, 5) // pad type (not implemented)
BrakePadSetting=2
BrakeDiscInertia=1.235 // inertia per meter of thickness
BrakeOptimumTemp=270.0 // optimum brake temperature in Celsius (peak brake grip)
BrakeFadeRange=400.0 // temperature outside of optimum that brake grip drops to half (too hot or too cold)
BrakeWearRate=1.50e-013 // meters of wear per second at optimum temperature
BrakeFailure=(1.40e-002,7.40e-004) // average and variation in disc thickness at failure
BrakeTorque=2430.0 // maximum brake torque at zero wear and optimum temp
BrakeHeating=0.00133 // heat added linearly with brake torque times wheel speed (at max disc thickness)
BrakeCooling=(2.60e-002,2.00e-004) // minimum brake cooling rate (base and per unit velocity) (at max disc thickness)
BrakeDuctCooling=6.00e-005 // brake cooling rate per brake duct setting (at max disc thickness)
[REARRIGHT]
BumpTravel=-0.0508 // suspension travel upwards
ReboundTravel=-0.2794 // suspension travel downwards
BumpStopSpring=160000.0 // initial spring rate of bumpstop
BumpStopRisingSpring=1.20e7 // rising spring rate of same (multiplied by deflection squared)
BumpStopDamper=2000.0 // initial damping rate of bumpstop
BumpStopRisingDamper=9.00e5 // rising damper rate of same (multiplied by deflection squared)
BumpStage2=0.090 // speed where damper bump moves from slow to fast
ReboundStage2=-0.090 // speed where damper rebound moves from slow to fast
FrictionTorque=7.95 // Newton-meters of friction between spindle and wheel
SpinInertia=1.925 // inertia in pitch direction including any axle but not brake disc
CGOffsetX=0.030 // x-offset from graphical center to physical center (NOT IMPLEMENTED)
PushrodSpindle=(0.170,-0.100, 0.000) // spring/damper connection to spindle or axle (relative to wheel center)
PushrodBody=( 0.200, 0.220, 0.000) // spring/damper connection to body (relative to wheel center)
CamberRange=(-0.3, 0.5, 1)
CamberSetting=0
PressureRange=(100.0, 1.0, 201)
PressureSetting=110
PackerRange=(0.000, 0.001, 1)
PackerSetting=0
SpringMult=1.00 // take into account suspension motion if spring is not attached to spindle (affects physics but not garage display)
SpringRange=(65000.0, 5000.0, 1)
SpringSetting=0
RideHeightRange=(0.150, 0.005, 1)
RideHeightSetting=0
DamperMult=1.00 // take into account suspension motion if damper is not attached to spindle (affects physics but not garage display)
SlowBumpRange=(4200.0, 250.0, 1)
SlowBumpSetting=0
FastBumpRange=(2100.0, 250.0, 1)
FastBumpSetting=0
SlowReboundRange=(8000.0, 500.0, 1)
SlowReboundSetting=0
FastReboundRange=(4200.0, 500.0, 1)
FastReboundSetting=0
BrakeDiscRange=(0.0254, 0.000, 1) // disc thickness
BrakeDiscSetting=0
BrakePadRange=(0, 1, 5) // pad type (not implemented)
BrakePadSetting=2
BrakeDiscInertia=1.235 // inertia per meter of thickness
BrakeOptimumTemp=270.0 // optimum brake temperature in Celsius (peak brake grip)
BrakeFadeRange=400.0 // temperature outside of optimum that brake grip drops to half (too hot or too cold)
BrakeWearRate=1.50e-013 // meters of wear per second at optimum temperature
BrakeFailure=(1.40e-002,7.40e-004) // average and variation in disc thickness at failure
BrakeTorque=2430.0 // maximum brake torque at zero wear and optimum temp
BrakeHeating=0.00133 // heat added linearly with brake torque times wheel speed (at max disc thickness)
BrakeCooling=(2.60e-002,2.00e-004) // minimum brake cooling rate (base and per unit velocity) (at max disc thickness)
BrakeDuctCooling=6.00e-005 // brake cooling rate per brake duct setting (at max disc thickness)
// Ford 4.6L DOHC 4-valve V-8 Base Engine
// Maximum Torque: 434 NM @ 4250 RPM
// Maximum Power: 305 horsepower @ 5800 RPM
RPMTorque=( 0, -38.8, -38.8)
RPMTorque=( 250, -39.0, -14.0)
RPMTorque=( 500, -40.0, 43.0)
RPMTorque=( 750, -41.6, 99.0)
RPMTorque=( 1000, -43.6, 206.0)
RPMTorque=( 1250, -45.8, 274.0)
RPMTorque=( 1500, -48.4, 312.0)
RPMTorque=( 1750, -51.1, 334.0)
RPMTorque=( 2000, -54.2, 352.0)
RPMTorque=( 2250, -57.4, 371.0)
RPMTorque=( 2500, -60.8, 394.0)
RPMTorque=( 2750, -64.4, 405.0)
RPMTorque=( 3000, -68.1, 411.0)
RPMTorque=( 3250, -72.1, 413.0)
RPMTorque=( 3500, -76.1, 422.0)
RPMTorque=( 3750, -80.4, 429.5)
RPMTorque=( 4000, -84.8, 433.0)
RPMTorque=( 4250, -89.3, 434.0)
RPMTorque=( 4500, -94.1, 432.0)
RPMTorque=( 4750, -99.0, 431.0)
RPMTorque=( 5000, -104.2, 426.0)
RPMTorque=( 5250, -109.6, 410.0)
RPMTorque=( 5500, -115.3, 392.0)
RPMTorque=( 5750, -121.2, 378.0)
RPMTorque=( 6000, -127.5, 360.0)
RPMTorque=( 6250, -134.3, 340.0)
RPMTorque=( 6500, -141.3, 321.0)
RPMTorque=( 6750, -149.1, 302.0)
RPMTorque=( 7000, -157.1, 273.0)
RPMTorque=( 7250, -166.0, 248.0)
RPMTorque=( 7500, -175.4, 186.0)
RPMTorque=( 7750, -185.5, 110.0)
RPMTorque=( 8000, -196.3, 50.0)
RPMTorque=( 8250, -207.8, 20.0)
RPMTorque=( 8500, -220.2, 5.0)
RPMTorque=( 8750, -233.5, -1.0)
RPMTorque=( 9000, -247.9, -12.0)
RPMTorque=( 9250, -263.6, -35.0)
RPMTorque=( 9500, -282.0, -99.0)
FuelConsumption=4.700e-005 // affected by throttle position and engine speed
FuelEstimate=0.893 // fudge factor for differences between vehicle types (used for lap estimates and AI pit scheduling)
EngineInertia=0.202
IdleThrottle=0.75
IdleRPMLogic=(950.0, 1200.0)
RevLimitRange=(6650.0, 100.0, 1)
RevLimitSetting=0
RevLimitLogic=150.0 // RPM range around current setting where rev limiter operates
EngineMapRange=(0, 1, 1) // 0 = most driveable, max = most power (low gears only) (unimplemented)
EngineMapSetting=0
EngineBrakingMapRange=(0.0,0.001,1) // input throttle is ranged from minimum to 100%, with the minimum = setting * step * RPM
EngineBrakingMapSetting=0 // i.e. if you want 10% throttle at 6000 RPM, set the middle number to 10/6000 = 0.00167
OptimumOilTemp=100.5 // degrees Celsius at which engine operates optimally
CombustionHeat=42.0 // degrees Celsius added per liter of fuel burned
EngineSpeedHeat=8.200e-004 // heat added linearly with engine speed
OilMinimumCooling=7.500e-003 // heat dissipated without oil/water transfer
OilWaterHeatTransfer=(2.000e-001,8.200e-005) // heat transfer from oil to water (base, w/ engine speed)
WaterMinimumCooling=4.000e-003 // base heat dissipated without velocity
RadiatorCooling=(1.780e-006, 4.510e-006) // cooling rate with velocity (base, per setting)
LifetimeEngineRPM=(6380.0,100.0) // (base engine speed for lifetime, range where lifetime is halved)
LifetimeOilTemp=(108.0,2.50) // (base oil temp for lifetime, range where lifetime is halved)
LifetimeAvg=91000 // average lifetime in seconds
LifetimeVar=30500 // lifetime random variance
EngineEmission=(0.18, 0.60, -2.5) // where flames and smoke are emitted (relative to ref frame at rear axle)
EngineSound=(0.18, 0.60, -2.5) // where engine sound is emitted (relative to ref frame at rear axle)
SpeedLimiter=1 // whether there is a pitlane speed limiter
OnboardStarter=1 // whether vehicle restarts when stalled
StarterTiming=(1.5, 0.0, 0.0) // average and variable cranking time, then blend with starting sound