Computer games and that

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

This week I’ve been using a plugin by Bruce Leeroy which attempts maximum realism by placing your point-of-view inside a racing driver’s helmet. Looks like this:

rFactor / mod is FSONE 2009 by IPM / track is Spa, Belgium / Helmet Cam by Bruce Leeroy

4 Likes

Needs moar…

2 Likes

There’s nothing wrong with the one I’m wearing. :innocent:

Blimey that looks more difficult than the real thing!

It is. It’s crushingly difficult.

There’s some supremely talented people working for no reward to make sim racing as realistic as possible.

1 Like

A useful .dll I found at the weekend. Might be of use for someone else.

When you use the xbox controller for PC gaming some games turn on the vibration feature of the controller which I find annoying.

And if there isn’t an in-game setting to turn it off, you’re stuck with it because there isn’t a global setting to turn it off either. Thanks Microsoft.

Some gamers have resorted to hacking the motors from their controllers.

Another solution is this patch I found. Put the .dll inside the same folder as the game executable and the vibration is gone! I like solutions that work. :+1:

I’ve got a cricked neck from playing Civ 5 all day.

2 Likes

Gone a bit old school, just finished Jade Empire again.

This week my drive has been the Osella PA-21S with my new favourite race sim nKPro.

This ‘professional simulator’ by Kunos Simulazioni includes a version of the Trento-Bondone hillclimb track in Italy which is a good challenge for the Osella.

Looks like this (with crashing when I drive it!)

2 Likes

Fuck, that looks and sounds great. I’d be over the railings :joy:

1 Like

^What he said.

If anyone wants a copy of nkPro (originally netKar Pro) you can download the demo version from the website below, install and run, and use this code to unlock the full version: 8Y4004103M471841P

The developer gave his permission for codes to be shared.

There isn’t any online racing because the servers have been switched off but as a standalone sim it’s definitely one of the better ones - realistic driving and difficult.

http://www.netkar-pro.com/main/

2 Likes

Anyone got a PS4 Pro? Looks good on UHDR TV.

Can’t find anyplace that will demo the VR, which is also tempting given some of the titles that have been released like Resident Evil 7 etc.

I got the PS4 Pro on LG 4k OLED, yes looks very good, games need a patch for 4k textures 30pfs or 1080p with higher frame rate 60fps, I prefer the higher frame rate at 1080p, the tv upscales 1080p games very good, same with standard blu-ray going from 1080p to 2160p upscale.

PSVR is very immersive but the quality of graphics is PS3 quality, you can see the pixel structure but this keeps the frame rate in real time, if that doesn’t bother you ( it doesn’t bother me ) I think it’s great, only had motion sickness once. I haven’t got Resident Evil 7 but I’ve heard good things.

1 Like

PSVR has has a £100 price drop in the past few days, so anyone thinking of getting one now’s a good time to jump in.

Wipeout Omega collection has a free VR patch also out now.

1 Like

Haha, now that’s a proper nerdgasm.

Imagine if there was a 300b amplifier build simulator.

2 Likes

:thinking:

Rabski’s garage?

:thinking:

Nope, probably not. Difficult to deal with the floating point errors when dividing by zero…

Anyone play Fortnite? Kids are pestering me to get it.