User Tools

Site Tools


gamemanual:gm_vehicles_design

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
gamemanual:gm_vehicles_design [2022/03/13 19:37] – [Manufacturing Requirements] admingamemanual:gm_vehicles_design [2022/03/14 14:04] (current) – [Vehicle Type Specific Rating] admin
Line 1: Line 1:
 +====== Vehicle Game Mechanics ======
  
 +
 +The Game Mechanics section of the manual details the internal formula used in the game's calculations.  This section of the manual uses pseudo-code and may not be 100% the same as the code in the game. 
 +
 +The Game Mechanics part of the manual is mainly designed to be a reference for the frequently asked question, "Why do I get this rating when I do X, Y, Z?!" Usually, this answer involves many different variables, which this section of the manual demonstrates. 
 +
 +**The game mechanics section of the manual shows [[https://idioms.thefreedictionary.com/seeing+how+the+sausage+gets+made|how the sausage gets made]]. So you really may want to avoid this portion of the manual if you enjoy the game.** 
 +
 +
 +
 +===== Variables =====
 +
 +This is a table of variables and their descriptions used in the formulas.
 +
 +==== Sliders ====
 +
 +=== Vehicle Sliders ===
 +
 +^ Variable ^ Description ^  ^ Variable ^ Description ^
 +| **Slider_Interior_Style** | Interior => Style Slider | | **Slider_Interior_Innovation** | Interior => Innovation Slider |
 +| **Slider_Interior_Luxury** | Interior => Luxury Slider | | **Slider_Interior_Comfort** | Interior => Comfort Slider |
 +| **Slider_Interior_Safety** | Interior => Safety Slider | | **Slider_Interior_Technology** | Interior => Technology Slider | 
 +| **Slider_Materials_MaterialQuality** | Materials => Material Quality Slider | | **Slider_Materials_Interior** | Materials => Interior Quality Slider |
 +| **Slider_Materials_Paint** | Materials => Paint Quality Slider | | **Slider_Materials_Techniques** | Materials => Manufacturing Techniques Slider |
 +| **Slider_Design_Style** | Design Focus => Style Focus Slider | | **Slider_Design_Luxury** | Design Focus => Luxury Focus Slider |
 +| **Slider_Design_Safety** | Design Focus => Safety Focus Slider | | **Slider_Design_Cargo** | Design Focus => Cargo Focus Slider |
 +| **Slider_Design_Dependability** | Design Focus => Dependability Slider | | **Slider_Design_DesignPace** | Design Focus => Development Pace Slider |
 +| **Slider_Demographics_Gender** | Design Focus => Gender Target Dropdown | | **Slider_Demographics_Wealth** | Design Focus => Wealth Dropdown |
 +| **Slider_Demographics_Age ** | Design Focus => Age Dropdown | | **Slider_Testing_Demographics** | Testing => Market Demographics Testing Slider |
 +| **Slider_Testing_Performance** | Testing => Performance Testing Slider | | **Slider_Testing_FuelEconomy** | Testing => Fuel Economy Testing Slider |
 +| **Slider_Testing_Comfort** | Testing => Comfortability Testing Slider | | **Slider_Testing_Utility** | Testing => Utility Testing Slider |
 +| **Slider_Testing_Reliability** | Testing => Reliability Testing Slider |
 +
 +
 +
 +=== Chassis Sliders ===
 +
 +[[gamemanual:gm_chassis_design#sliders|See Chassis Game Mechanics]]
 +
 +=== Engine Sliders ===
 +
 +[[gamemanual:gm_engines_design#sliders|See Engine Game Mechanics]]
 +
 +
 +=== Gearbox Sliders ===
 +
 +[[gamemanual:gm_gearboxes_design#sliders|See Gearbox Game Mechanics]]
 +
 +
 +==== Components ====
 +
 +
 +=== Chassis ===
 +
 +[[gamemanual:gm_chassis_design#sub-components|See Chassis Game Mechanics]]
 +
 +=== Engine Sliders ===
 +
 +[[gamemanual:gm_engines_design#sub-components|See Engine Game Mechanics]]
 +
 +
 +=== Gearbox Sliders ===
 +
 +[[gamemanual:gm_gearboxes_design#sub-components|See Gearbox Game Mechanics]]
 +
 +
 +==== Demographic Targeting ====
 +
 +=== Gender ===
 +
 +^ Selection ^ Bonuses ^ Penalties ^
 +| Male | <WRAP>
 +  * **Performance:** +0.05
 +  * **Power:** +0.05
 +  * **Driveability:** +0.05 
 +</WRAP> | <WRAP>
 +  * **Fuel Economy:** -0.05
 +  * **Safety:** -0.05
 +  * **Cargo:** -0.05
 +</WRAP> |
 +| Female | <WRAP>
 +  * **Fuel Economy:** +0.05
 +  * **Safety:** +0.05
 +  * **Cargo:** +0.05 
 +</WRAP> | <WRAP>
 +  * **Performance:** -0.05
 +  * **Power:** -0.05
 +  * **Driveability:** -0.05
 +</WRAP> |
 +| Neutral | Neutral | Neutral |
 +
 +=== Age ===
 +
 +^ Selection ^ Bonuses ^ Penalties ^
 +| Less Than 25 | <WRAP>
 +  * **Performance:** +0.05
 +  * **Fuel Economy:** +0.05
 +  * **Dependability:** +0.05 
 +</WRAP> | <WRAP>
 +  * **Luxury:** -0.05
 +  * **Safety:** -0.05
 +  * **Quality:** -0.05
 +</WRAP> |
 +| 25-35 | <WRAP>
 +  * **Safety:** +0.05
 +  * **Dependability:** +0.05 
 +  * **Cargo:** +0.05 
 +</WRAP> | <WRAP>
 +  * **Performance:** -0.05
 +  * **Power:** -0.05
 +  * **Driveability:** -0.05
 +</WRAP> |
 +| 35-55 | <WRAP>
 +  * **Performance:** +0.05
 +  * **Power:** +0.05
 +  * **Luxury:** +0.05
 +  * **Quality:** +0.05 
 +</WRAP> | <WRAP>
 +  * **Fuel Economy:** -0.05
 +  * **Dependability:** -0.05
 +  * **Safety:** -0.05
 +  * **Cargo:** -0.05
 +</WRAP> |
 +| Greater Than 55 | <WRAP>
 +  * **Safety:** +0.05
 +  * **Luxury:** +0.05
 +  * **Quality:** +0.05
 +  * **Dependability:** +0.05 
 +</WRAP> | <WRAP>
 +  * **Performance:** -0.05
 +  * **Power:** -0.05
 +  * **Driveability:** -0.05
 +  * **Fuel Economy:** -0.05
 +</WRAP> |
 +
 +=== Wealth ===
 +
 +This demographic's "value" variable also affects several other ratings covered further down the page.
 +
 +^ Selection ^ Adjustment ^ Value ^
 +| Ultra-Low | <WRAP>
 +  * **Performance:** -0.0075
 +  * **Driveability:** -0.0075
 +  * **Safety:** -0.012
 +  * **Luxury:** -0.015
 +</WRAP> | 0 |
 +| Low | <WRAP>
 +  * **Performance:** -0.005
 +  * **Driveability:** -0.005
 +  * **Safety:** -0.008
 +  * **Luxury:** -0.01
 +</WRAP> | 1 |
 +| Lower-Middle | <WRAP>
 +  * **Performance:** -0.0025
 +  * **Driveability:** -0.0025
 +  * **Safety:** -0.004
 +  * **Luxury:** -0.005
 +</WRAP> | 2 |
 +| Middle | <WRAP>
 +  * **Performance:** +0
 +  * **Driveability:** +0
 +  * **Safety:** +0
 +  * **Luxury:** +0
 +</WRAP> | 3 |
 +| Upper-Middle | <WRAP>
 +  * **Performance:** +0.0025
 +  * **Driveability:** +0.0025
 +  * **Safety:** +0.004
 +  * **Luxury:** +0.005
 +</WRAP> | 4 |
 +| Upper | <WRAP>
 +  * **Performance:** +0.005
 +  * **Driveability:** +0.005
 +  * **Safety:** +0.008
 +  * **Luxury:** +0.01
 +</WRAP> | 5 |
 +| Wealthy | <WRAP>
 +  * **Performance:** +0.0075
 +  * **Driveability:** +0.0075
 +  * **Safety:** +0.012
 +  * **Luxury:** +0.015
 +</WRAP> | 6 |
 +| Ultra-Wealthy | <WRAP>
 +  * **Performance:** +0.01
 +  * **Driveability:** +0.01
 +  * **Safety:** +0.016
 +  * **Luxury:** +0.02
 +</WRAP> | 7 |
 +
 +
 +==== Global ====
 +
 +^ Variable ^ Description ^  ^ Variable ^ Description ^
 +
 +year
 +designBodySkill
 +Car_Type.Wealth_Index
 +global_interestrate
 +carPriceRate
 +designRandomVal
 +ex_0d99p_year50R
 +ex_1d0035p_year99
 +ex_1d005p_year99
 +ex_1d02p_year99
 +ex_1d03p_year99
 +ex_1d04p_year99
 +ex_1d05p_year99
 +FactOverallVAL
 +
 +===== Specs =====
 +
 +==== Length ====
 +
 +<code>
 +Max_Z = Largest Z coordinate value of the vehicle body.
 +Min_Z = Smallest Z coordinate value of the vehicle body. This value is a negative number.
 +
 +Length = ( Max_Z + Absolute Value of Min_Z ) / 2.5
 +
 +If (Length < Selected_Chassis_Length)
 + Length = (Selected_Chassis_Length / 7.51) + ( Max_Z + Absolute Value of Min_Z )/3.0
 +
 +######
 +Secondary Calculations
 +######
 +
 +if( Length > Selected_Chassis.Length*1.7 )
 +{
 + AdjustValue = Length / (Selected_Chassis.Length*1.7)
 + Length = Selected_Chassis.Length*1.7
 + NeedToScale = true
 +}
 +
 +</code>
 +
 +==== Width ====
 +
 +<code>
 +Max_X = Largest X coordinate value of the vehicle body.
 +Min_X = Smallest X coordinate value of the vehicle body. This value is a negative number.
 +
 +Width = ( Max_X + Absolute Value of Min_X ) / 3.0
 +
 +if(Width < Selected_Chassis.Width)
 +{
 + Old_Width = Width
 + Width = (Selected_Chassis.Width / 2.54) + ( Max_X + Absolute Value of Min_X )/15.5
 + Height_Scale = ((Width/Old_Width))/2.0
 +}
 +
 +
 +######
 +Secondary Calculations
 +See Length for possible variables
 +######
 +
 +if(Width>Selected_Chassis.Width*1.2)
 +{
 + if(Width / (Selected_Chassis.Width*1.2) > AdjustValue)
 + AdjustValue = Width / (Selected_Chassis.Width*1.2)
 +
 + Width = Selected_Chassis.Width*1.2
 + NeedToScale = true
 +}
 +
 +
 +
 +</code>
 +
 +==== Height ====
 +
 +<code>
 +
 +Max_Y = Largest Y coordinate value of the vehicle body.
 +Min_Y = Smallest Y coordinate value of the vehicle body. This value is a negative number.
 +
 +Height = ( Max_Y + Absolute Value of Min_Y ) / 2.1
 +
 +
 +######
 +See Width for this variable
 +######
 +
 +if( Height_Scale > 1 ) 
 +{
 + Height_Scale = ((Height_Scale - 1) / 2.5) + 1
 + Height = Height * Height_Scale
 +}
 +
 +######
 +Secondary Calculations
 +See Length And Width for these variables
 +######
 +
 +if( NeedToAdjust)
 + Height = Height / AdjustValue
 +
 +</code>
 +
 +
 +==== Estimated Surface Area ====
 +
 +Used for fast calculations for Drag Coefficient. Game has a more accurate version of this, but we don't use it for faster processing.
 +<code cpp>
 +Surface_Area = ( (Width/2.5) * (Height/2.5) ) / 26
 +</code>
 +
 +
 +
 +==== Drag Coefficient ====
 +
 +<code cpp>
 +
 +//CombinedAngles = Single value comprised of multiple angle and flow tests on the frontial surface of the vehicle body. 
 +
 +DragArea = 0.029 * CombinedAngles +  0.000513 * (CombinedAngles^2)
 +
 +Drag_Coefficient = 0.08 + (((Surface_Area/115.0)+(DragArea/115.0))/1.5)
 +
 +if(year < 1923 AND year != 1800)
 +{
 +    Drag_Coefficient = Drag_Coefficient  + (40.0/(year-1800))
 +}
 +
 +if(year > 1990)
 +{
 +    if(year < 2021)
 +        Drag_Coefficient = Drag_Coefficient  - ((Drag_Coefficient/9.75) * ((year-1990)/100.0))
 +    else
 +        Drag_Coefficient = Drag_Coefficient  - ((Drag_Coefficient/9.75) * ((2020-1990)/100.0))
 +}
 +</code>
 +
 +
 +==== Weight ====
 +
 +Weight is in KG
 +
 +<code cpp>
 +Weight = Selected_Chassis.Weight + (Selected_Engine.Weight*0.4536) + (Selected_Gearbox.Weight*0.4536) +
 +    Absolute Value Of((1.0+Slider_Materials_MaterialQuality*0.35 + Slider_Design_Safety*(1.3-(0.3 * ex_0d99p_year50R)) +
 +    Slider_Design_Luxury*(0.5+(0.2 * ex_1d0035p_year99)) + Slider_Interior_Comfort*0.6 +
 +    Slider_Interior_Luxury*0.7 + Slider_Interior_Safety*1.25 + Slider_Materials_Interior*0.35 - 
 +    (Slider_Materials_Techniques*0.4 + Slider_Testing_FuelEconomy*0.4 + Slider_Testing_Performance*0.4)) *
 +    (50*(Car_Type.Weight_Value+0.15)*fastpow(1.0135,(year-1899)/1.4))) +
 +    (Length*1.525 + Width*1.525 + Height*1.525)*(Car_Type.Weight_Value+0.1)
 +</code>
 +
 +
 +
 +==== Cargo Volume ====
 +
 +Values are in L
 +
 +<code cpp>
 +Cargo_Volume = ((Length * Width * Height -(Selected_Engine.width * Selected_Engine.length))/1.25 +
 +    (((Length * Width * Height -(Selected_Engine.width * Selected_Engine.length))/5.0) *
 +    (Car_Type.Cargo_Value +(0.25 * Slider_Design_Cargo)+(0.1 * Slider_Testing_Utility)))) / 800.0
 +</code>
 +
 +
 +
 +==== Fuel Mileage ====
 +
 +Values in MPG
 +
 +<code cpp>
 +Fuel_WeightMod = (((Weight*2.205) * 4.076055) * 0.00134102209) +
 +    ((0.7 * (Surface_Area*0.092903) * Drag_Coefficient * 21253.933) * 0.00134102209)
 +
 +
 +if(Weight > 0 && ((((Weight) * 2.015955) * 0.00134102209) + 
 +    (( 0.7 * (Surface_Area*0.092903) *Drag_Coefficient * 2571.353) * 0.00134102209)) > 0 )
 +{
 +    Fuel_Mileage = ((((Selected_Gearbox.LowGear_Ratio + 0.01) / 2.0) * 
 +        ((Selected_Engine.Torque*1.05)/((Weight)))) * 
 +        ((Selected_Engine.HP*1.05)/((((Weight) * 2.015955) * 0.00134102209) +
 +        ((0.7 * (Surface_Area*0.092903) * Drag_Coefficient * 2571.353) * 0.00134102209))) )
 +}
 +
 +
 +Fuel_Mileage = Fuel_Mileage + (Selected_Engine.Torque / 
 +        (Fuel_WeightMod*(3.0 + ((1.0-Selected_Gearbox.LowGear_Ratio)))))
 +
 +Fuel_Mileage = Fuel_Mileage * Selected_Engine.FuelMileage
 +
 +
 +Fuel_Mileage = 1 + Fuel_Mileage + ((3* Selected_Gearbox.Number_Of_Gears/6.0) + 
 + (1.9*((Selected_Gearbox.FuelEconomy_Rating/100.0)) + 
 +        (0.7*Slider_Testing_FuelEconomy) + (0.2*(1-Slider_Testing_Performance))))
 +
 +
 +if(Fuel_Mileage > (Selected_Engine.FuelMileage * 1.5))
 +    Fuel_Mileage = (Selected_Engine.FuelMileage * 1.5)
 +else if(Fuel_Mileage < (Selected_Engine.FuelMileage * 0.4))
 +    Fuel_Mileage = (Selected_Engine.FuelMileage * 0.4)
 +
 +
 +
 +</code>
 +
 +
 +==== Top Speed ====
 +
 +Values are in mph.
 +
 +<code cpp>
 +
 +friction = 1
 +
 +if((Drag_Coefficient * 0.6461 * (Surface_Area * 0.1)) != 0)
 +{
 +    friction = ((Weight*0.14715)/(Drag_Coefficient*0.6461*(Surface_Area*0.1)))^3 / 27.0 +
 +        ((Selected_Engine.HP*745.699872)/(Drag_Coefficient*0.6461*(Surface_Area*0.1)))^2 * 0.25
 +}
 +else
 +{
 +    friction = ((Weight*0.14715)/(1+Drag_Coefficient*0.6461*(Surface_Area*0.1)))^3 / 27.0 +
 +        ((Selected_Engine.HP*745.699872)/(1+Drag_Coefficient*0.6461*(Surface_Area*0.1)))^2 * 0.25
 +}
 +
 +sqFriction = friction^0.5
 +
 +Top_Speed = 1
 +
 +if((Drag_Coefficient * 1.2922 * (Surface_Area *0.1 )) != 0 && Selected_Engine.HP * 745.699872 != 0)
 +{
 +    if(((Selected_Engine.HP*745.699872)/(Drag_Coefficient*1.2922*(Surface_Area/10.0))-sqFriction) == 0)
 +    {
 +        sqFriction++
 +
 +        Top_Speed = ((Selected_Engine.HP*745.699872)/
 +            (Drag_Coefficient*1.2922*(Surface_Area/10.0))+sqFriction)^(0.3333))+
 +            (Selected_Engine.HP*745.699872)/(Drag_Coefficient*1.2922*(Surface_Area/10.0))-sqFriction)^0.3333*
 +            ((Selected_Engine.HP*745.699872)/(Drag_Coefficient*1.2922*(Surface_Area/10.0))-sqFriction)/
 +            ((Selected_Engine.HP*745.699872)/(Drag_Coefficient*1.2922*(Surface_Area/10.0))-sqFriction)
 +    }
 +    else
 +    {
 +        Top_Speed = ((Selected_Engine.HP*745.699872)/
 +            (Drag_Coefficient*1.2922*(Surface_Area/10.0))+sqFriction)^0.3333+
 +            ((Selected_Engine.HP*745.699872)/(Drag_Coefficient*1.2922*(Surface_Area/10.0))-sqFriction)^0.3333*
 +            ((Selected_Engine.HP*745.699872)/(Drag_Coefficient*1.2922*(Surface_Area/10.0))-sqFriction)/
 +            ((Selected_Engine.HP*745.699872)/(Drag_Coefficient*1.2922*(Surface_Area/10.0))-sqFriction)
 +    }
 +}
 +else
 +{
 +    Top_Speed = ((Selected_Engine.HP*745.699872)/(1+Drag_Coefficient*1.2922*(Surface_Area*0.1))+sqFriction)^0.3333+
 +        ((Selected_Engine.HP*745.699872)/(1+Drag_Coefficient*1.2922*(Surface_Area*0.1))-sqFriction)^0.3333 *
 +        ((Selected_Engine.HP*745.699872)/(1+Drag_Coefficient*1.2922*(Surface_Area*0.1))-sqFriction)/
 +        ((Selected_Engine.HP*745.699872)/(1+Drag_Coefficient*1.2922*(Surface_Area*0.1))-sqFriction)
 +}
 +
 +limitedGears = 1
 +
 +if(Selected_Gearbox.Number_Of_Gears < 4)
 + limitedGears = Selected_Gearbox.Number_Of_Gears / 8.0
 +
 +
 +Top_Speed = Top_Speed * (2.3 + (0.45*(limitedGears+(0.02*Selected_Gearbox.Number_Of_Gears)))+
 +    (1.0*(Selected_Gearbox.HighGear_Ratio)))
 +
 +HP_MaxSpeed = 1
 +
 +Speed_Weight_Multiplier = 0
 +
 +if(Weight/Selected_Engine.HP <= 15)
 + Speed_Weight_Multiplier = 0
 +else if(Weight/Selected_Engine.HP <= 38 )
 +{
 + Speed_Weight_Multiplier = ((Weight/Selected_Engine.HP)-15) / 15.0 - 
 +        (((1.0-Selected_Gearbox.LowGear_Ratio)+(1.0-Selected_Gearbox.HighGear_Ratio))/2.0)
 +}
 +else
 +{
 + Speed_Weight_Multiplier = 1.5 - (((1.0-Selected_Gearbox.LowGear_Ratio)+
 +        (1.0-Selected_Gearbox.HighGear_Ratio))/1.8)
 +}
 +
 +
 +if(Speed_Weight_Multiplier < 0)
 + Speed_Weight_Multiplier = 0
 +
 +HP_MaxSpeed = ((Selected_Engine.HP*745.7) / 
 +    (Drag_Coefficient * 1.25 * (Surface_Area*0.092903)))^(1.0/3.0) * (3.6-Speed_Weight_Multiplier)
 +
 +if(Top_Speed > HP_MaxSpeed)
 +{
 + if(Weight/Selected_Engine.HP > 37)
 + {
 + Top_Speed = HP_MaxSpeed + 1 + 
 +            (10 * ((1.0-Selected_Gearbox.LowGear_Ratio)+(0.2*(1.0-Selected_Gearbox.HighGear_Ratio))))
 + }
 + else if(Selected_Engine.HP < 15)
 + {
 + Top_Speed = HP_MaxSpeed + (Selected_Engine.HP *0.4) + 
 +            (9 * ((0.02*Selected_Gearbox.Number_Of_Gears)+(1.0*(Selected_Gearbox.HighGear_Ratio))))
 + }
 + else
 + {
 + Top_Speed = HP_MaxSpeed +  6  + 
 +            (18 * ((0.02*Selected_Gearbox.Number_Of_Gears)+(1.0*(Selected_Gearbox.HighGear_Ratio))))
 + }
 +}
 +else if(Top_Speed < HP_MaxSpeed +  6  +
 +    (9 * ((0.02*Selected_Gearbox.Number_Of_Gears)+(1.0*(Selected_Gearbox.HighGear_Ratio)))))
 +{
 +    if(Weight/Selected_Engine.HP > 37)
 +    {
 +        Top_Speed = Top_Speed +  1 + (10 * ((1.0-Selected_Gearbox.LowGear_Ratio)+
 +            (0.2*(1.0-Selected_Gearbox.HighGear_Ratio))))
 +    }
 +    else
 +    {
 +        Top_Speed = Top_Speed + 6  + (9 * ((0.02*Selected_Gearbox.Number_Of_Gears)+
 +            (1.0*(Selected_Gearbox.HighGear_Ratio))))
 +    }
 +}
 +
 +
 +</code>
 +
 +
 +==== Acceleration ====
 +
 +<code cpp>
 +if((Selected_Engine.HP*745.699872) Does Not Equal 0 AND 
 +    ((Selected_Engine.HP*745.699872)^0.5*(Selected_Engine.Torque * 1.35581795)^0.5) Does Not Equal 0)
 +{
 +    Acceleration_MPH = 6 * Drag_Coefficient + 0.35 * 
 +        ((( Weight * 2.2046) * 719.44114176) / (Selected_Engine.HP*745.699872)) +
 +        0.4 * ((( Weight * 2.2046)^0.5 * 719.44114176)/((Selected_Engine.HP*745.699872)^0.5 *
 +        (Selected_Engine.Torque * 1.35581795)^0.5)) * ((Selected_Gearbox.LowGear_Ratio) + 1.5 - 
 +        (Selected_Gearbox.Number_Of_Gears/10.0)+(0.2*(1.1-(Selected_Gearbox.StaticPerformanceRate/100.0))))
 +
 +    Acceleration_KPH = 6*Drag_Coefficient +  0.35 * ((( Weight * 2.2046) * 771.60617284) /
 +        (Selected_Engine.HP*745.699872)) + 0.4 * ((( Weight * 2.2046)^0.5 * 771.60617284) / 
 +        ((Selected_Engine.HP*745.699872)^0.5 * (Selected_Engine.Torque * 1.35581795)^0.5)) *
 +        ((Selected_Gearbox.LowGear_Ratio) + 1.5 - (Selected_Gearbox.Number_Of_Gears/10.0) +
 +        (0.2*(1.1-(Selected_Gearbox.StaticPerformanceRate/100.0))))
 +}
 +
 +if(Acceleration_MPH < 0.5)
 +{
 +    Acceleration_MPH = 0.5
 +    Acceleration_KPH = 0.5
 +}
 +</code>
 +
 +==== Braking ====
 +
 +<code cpp>
 +Braking_60_to_0 = (((100 * ex_0d99p_year99) * (1.01-Slider_Design_Safety)) + 130.16667 +
 +    ((Weight/100.0)*(1.0-Drag_Coefficient))+ (30*(1-Selected_Chassis.FrSus_Braking)) + 
 +    (30*(1-Selected_Chassis.RrSus_Braking)) + (50*(1.0-Selected_Chassis.Slider_SUS_Braking)) + 
 +    (50-(Selected_Chassis.StaticPerform/2.0))) * ex_0d995p_year99
 +
 +</code>
 +
 +
 +==== Towing ====
 +
 +<code cpp>
 +Tow_Weight = Selected_Engine.Torque * (1.25 + (4 * ((1-Selected_Gearbox.LowGear_Ratio) +
 +    (0.5*(1-Selected_Gearbox.HighGear_Ratio))))) * 7.5 +
 +    (100.0 *(static_cast<Ogre::Real>(Selected_Chassis.Original_Strength_Rating)/100.0))
 +
 +Tow_Weight = Tow_Weight * 0.454 - Weight
 +
 +if(Tow_Weight < 10)
 +    Tow_Weight = 10
 +
 +</code>
 +
 +==== Roadhold ====
 +
 +<code cpp>
 +Roadhoad_LateralG = 0.4 +(0.5*(42475269.9 - (Length * Width * Height))/42475269.9) +
 +    (0.5*(Selected_Chassis.Original_Performance_Rating/100.0)) +
 +    (0.2 * ((1300.0-Weight)/1300.0))
 +</code>
 +===== Ratings =====
 +
 +
 +==== Design Requirements ====
 +
 +<code cpp>
 +Design_Requirements = ( 5 * Slider_Design_Cargo + 15 * Slider_Design_Dependability + 
 +    6 * Slider_Design_Luxury + 10 * Slider_Design_Safety + 10 * Slider_Design_Style + 
 +    6 * Slider_Interior_Innovation + 10 * Slider_Interior_Safety + 4 * Slider_Interior_Comfort +
 +    4* Slider_Testing_Comfort + 4* Slider_Testing_Demographics + 4* Slider_Testing_FuelEconomy +
 +    4* Slider_Testing_Performance + 4* Slider_Testing_Reliability + 4* Slider_Testing_Utility) +
 +    Slider_Materials_Techniques + Slider_Materials_Interior + Slider_Materials_MaterialQuality +
 +    Slider_Materials_Interior + Slider_Materials_Paint  + (5*(1-(RnD_Skills/100.0)))
 +   
 +</code>
 +
 +==== Manufacturing Requirements ====
 +
 +<code cpp>
 +Manufacturing_Requirements = ((Selected_Chassis.Manufacturing_Requirements + 
 +    Selected_Engine.Manufacturing_Requirements + Selected_Gearbox.Manufacturing_Requirements)/4.8) +
 +    ( 3 *  Slider_Interior_Comfort + 3 * Slider_Interior_Luxury + 3 * Slider_Interior_Safety +
 +    3 * Slider_Interior_Style + 3 * Slider_Interior_Technology+ 7 * Slider_Materials_Techniques + 
 +    4 * Slider_Materials_Interior + 4 * Slider_Materials_MaterialQuality  + 4 * Slider_Materials_Paint) +
 +    (5*(1-(RnD_Skills/100.0))) + (Slider_Design_Cargo + Slider_Design_Dependability + 
 +    Slider_Design_Luxury + Slider_Design_Safety + Slider_Design_Style + Slider_Testing_Comfort + 
 +    Slider_Testing_Demographics + Slider_Testing_FuelEconomy + Slider_Testing_Performance + 
 +    Slider_Testing_Reliability + Slider_Testing_Utility)/2.0 + 
 +    (10*(Slider_Demographics_Wealth/10.0)*Slider_Testing_Demographics)
 +
 +if(Manufacturing_Requirements > 100)
 +    Manufacturing_Requirements = 100
 +</code>
 +
 +
 +==== Performance Rating ====
 +
 +<code cpp>
 +Power_To_Weight_Ratio = 1;
 +
 +if(Weight != 0)
 +    Power_To_Weight_Ratio = (Selected_Engine.HP / ((Weight*2.205)/2000.0))
 +else
 +    Power_To_Weight_Ratio = (Selected_Engine.HP / ((1+Weight*2.205)/2000.0))
 +
 +Power_To_Weight_Ratio = -.024 + .003 * Power_To_Weight_Ratio
 +
 +if(Power_To_Weight_Ratio>1)
 +    Power_To_Weight_Ratio = 1
 +else if(Power_To_Weight_Ratio<0.01)
 +    Power_To_Weight_Ratio=0.01
 +
 +
 +
 +Temp_Acceleration = Acceleration_KPH
 +Temp_Brake = Braking_60_to_0
 +
 +if(Temp_Brake <= 0)
 +    Temp_Brake = 1
 +
 +
 +if(Temp_Acceleration = 0)
 +{
 +    Temp_Acceleration = 60
 +    Temp_Brake = 10000
 +}
 +else if (Temp_Acceleration > 60)
 +{
 +    Temp_Acceleration = 60
 +}
 +
 +Rating_Performance = 10.0 * (Selected_Chassis.Performance_Rating/100.0) + 
 +    45.0 * Power_To_Weight_Ratio + (15* Slider_Testing_Performance) + 
 +    5 * Roadhoad_LateralG + (5 * (Top_Speed/321.0)) + 
 +    (5* (Selected_Gearbox.Performance_Rating/100.0)) + (5 * (50.0/Temp_Brake)) +
 +    (10 * ((60.0-Temp_Acceleration)/60.0)) +(75*Demo_Performance*Slider_Testing_Demographics)
 +
 +if(Rating_Performance > 100)
 +    Rating_Performance = 100
 +else if(Rating_Performance < 0 )
 +    Rating_Performance = 1
 +
 +
 +</code>
 +
 +==== Driveability ====
 +
 +<code cpp>
 +
 +Rating_Drivability = (27 * (Selected_Chassis.Performance_Rating/100.0)) + (6 * Selected_Chassis.FrSus_Steering) + 
 +    (6 * Selected_Chassis.RrSus_Steering) - (5 * (Selected_Gearbox.Comfort_Rating)) + 
 +    (41*(Roadhoad_LateralG/1.4)) + (15*Selected_Chassis.SubComponent_Drive_ridePerformance) +
 +    (12 * Slider_Testing_Performance) - (2 * Slider_Testing_Comfort) + (75*demoDrive*Slider_Testing_Demographics)
 +
 +if(Rating_Drivability > 100)
 +{
 +    Rating_Drivability = 100;
 +}
 +else if(Rating_Drivability < 0 )
 +{
 +    Rating_Drivability = 1;
 +}
 +
 +</code>
 +
 +
 +==== Safety Rating ====
 +
 +<code cpp>
 +//See Performance Rating for value of Temp_Brake
 +
 +Rating_Safety = (10 * Slider_Design_Safety) + (10 * Slider_Interior_Safety) + 
 +    (15 * Selected_Chassis.SubComponent_Frame_Safety) + (2 * Slider_Interior_Technology) +
 +    (2*Slider_Materials_Techniques) + (2*Slider_Materials_Interior) + 
 +    (2 * Slider_Materials_MaterialQuality) + (2 * Slider_Testing_Reliability) +
 +    (20 * (Weight/4000.0)) + (15*(designSafetySkill/100.0)) +
 +    (5 * (50.0/Temp_Brake) )  + (15 * (Selected_Chassis.Strength_Rating/100.0)) +
 +    (75*Demographics_Safety*Slider_Testing_Demographics)
 +
 +if(Rating_Safety > 100)
 +    Rating_Safety = 100
 +else if(Rating_Safety < 0 )
 +    Rating_Safety = 1
 +
 +
 +
 +</code>
 +
 +
 +==== Fuel Ratings ====
 +
 +<code cpp>
 +Rating_Fuel_Economy = Fuel_Mileage*2
 +
 +if(Rating_Fuel_Economy > 100)
 +    Rating_Fuel_Economy = 100
 +else if (Rating_Fuel_Economy < 1)
 +    Rating_Fuel_Economy = 1
 +</code>
 +
 +
 +
 +
 +==== Power Rating ====
 +
 +<code cpp>
 +Rating_Power = 20 * (Tow_Weight/25000.0)
 +
 +if(Rating_Power>50)
 +    Rating_Power=50
 +
 +Rating_Power = Rating_Power + (70 * (Selected_Engine.Torque/600.0)) +
 +    (10 * (Selected_Gearbox.Power_Rating/100.0))+
 +    (20*Demographics_Power*Slider_Testing_Demographics)
 +
 +if(Rating_Power>100)
 +    Rating_Power=100
 +else if(Rating_Power < 0)
 +    Rating_Power=0
 +</code>
 +
 +
 +==== Cargo Rating ====
 +
 +<code cpp>
 +
 +Rating_Cargo = 85 * (Cargo_Volume / 3200.0)
 +if(Rating_Cargo > 85)
 +    Rating_Cargo = 85
 +
 +Rating_Cargo = Rating_Cargo + (10 * Slider_Design_Cargo) + 
 +    (5 * Slider_Testing_Utility)+(30*Demographics_Cargo*Slider_Testing_Demographics)
 +
 +if(Rating_Cargo>100)
 +    Rating_Cargo=100
 +else if(Rating_Cargo < 0)
 +    Rating_Cargo=0
 +</code>
 +
 +
 +
 +
 +==== Luxury Rating ====
 +
 +<code cpp>
 +Rating_Luxury = (7 * Slider_Design_Luxury) + (7 * Slider_Design_Style) +
 +    (4 * Slider_Interior_Comfort) + (4*Slider_Interior_Innovation) + 
 +    (8 * Slider_Interior_Luxury) + (4*Slider_Interior_Style) + 
 +    (3*Slider_Interior_Technology) + (5*Slider_Materials_Interior) + 
 +    (5* Slider_Testing_Comfort) + (3*Slider_Testing_Utility) + 
 +    (15 * (Selected_Chassis.Comfort_Rating/100.0)) + 
 +    (8 * (Selected_Gearbox.Comfort_Rating/100.0)) + 
 +    (10 * (Selected_Engine.Smoothness_Rating/100.0)) + 
 +    (5 * (Rating_Cargo/100.0)) + (5 * Selected_Gearbox.Subcomponents_Gearbox_Smoothness )  + 
 +    (7*(designLuxurySkill/100.0))+(75*Demographics_Luxury*Slider_Testing_Demographics)
 +
 +
 +if(Rating_Luxury>100)
 +    Rating_Luxury=100
 +else if(Rating_Luxury < 0)
 +    Rating_Luxury=0
 +
 +
 +
 +</code>
 +
 +
 +==== Quality Rating ====
 +
 +<code cpp>
 +
 +Rating_Quality = (10*Slider_Design_Dependability) + (5*Slider_Design_Luxury) + 
 +    (5*Slider_Design_Style) + (5*Slider_Materials_Techniques) + (15*Slider_Materials_Interior) +
 +    (10*Slider_Materials_Paint) + (10*Slider_Testing_Reliability) + (5*Slider_Testing_Utility) +
 +    (5* (Selected_Gearbox.Reliability_Rating/100.0)) + 
 +    (5* (Selected_Chassis.Durability_Rating/100.0)) + 
 +    (5* (Selected_Engine.Reliability_Rating/100.0)) + 
 +    (20 * (designBodySkill/100.0)) +
 +    (75*(Slider_Demographics_Wealth/15.0)*Slider_Testing_Demographics)
 +
 +if(Rating_Quality>100)
 +    Rating_Quality=100
 +else if(Rating_Quality < 0)
 +    Rating_Quality=0
 +
 +
 +if(Selected_Gearbox.Max_Torque_Support < Selected_Engine.Torque)
 +{
 +    Rating_Quality = (Rating_Quality*0.7) + 
 +        ( (Rating_Quality*0.25) *(Selected_Gearbox.Max_Torque_Support / Selected_Engine.Torque))
 +
 +}
 +</code>
 +
 +
 +
 +==== Dependability Rating ====
 +
 +<code cpp>
 +Rating_Dependability = (20*Slider_Design_Dependability) + (5*Slider_Materials_MaterialQuality) +
 +    (15*Slider_Testing_Reliability) + (5*Slider_Testing_Utility) + 
 +    (15*(Selected_Chassis.Durability_Rating/100.0)) + (5*(Selected_Chassis.Strength_Rating/100.0)) +
 +    (10*(Selected_Gearbox.Reliability_Rating/100.0)) + (20*(Selected_Engine.Reliability_Rating/100.0)) +
 +    (5*(Selected_Engine.Smoothness_Rating/100.0))+(75*Demographics_Dependability*Slider_Testing_Demographics)
 +
 +if(Rating_Dependability>100)
 +    Rating_Dependability=100
 +else if(Rating_Dependability < 0)
 +    Rating_Dependability=0
 +
 +
 +if(Selected_Gearbox.Max_Torque_Support < Selected_Engine.Torque)
 +{
 +    Rating_Dependability = Rating_Dependability * (Selected_Gearbox.Max_Torque_Support / Selected_Engine.Torque)
 +    Rating_Dependability = Rating_Dependability *  0.95
 +}
 +</code> 
 +
 +
 +==== Overall Rating ====
 +
 +<code cpp>
 +Rating_Overall = (Rating_Performance + Rating_Drivability + Rating_Luxury + Rating_Safety +
 +    Rating_Fuel_Economy + Rating_Power + Rating_Cargo +  Rating_Quality +
 +    Rating_Dependability + Selected_Chassis.Overall + Selected_Engine.Overall + 
 +    Selected_Gearbox.OverallRate + designBodySkill) / 13.0 
 +
 +Rating_Overall =  Rating_Overall + (5*PreResearchcarAmountEffect)
 +
 +if(Rating_Overall > 100)
 +    Rating_Overall = 100;
 +
 +</code>
 +
 +
 +==== Vehicle Type Specific Rating ====
 +
 +See the [[gamemanual:references_vehicletypeimportance|Vehicle Type Importance Ratings page]] for vehicle type importance ratings.
 +
 +<code cpp>
 +
 +Rating_CarType = (Rating_Cargo*Car_Type.Rating_Cargo * 3)  +
 +    (Rating_Dependability * Car_Type.Rating_Dependability * 3)  +
 +    (Rating_Drivability * Car_Type.Rating_Drivability * 3) +
 +    (Rating_Fuel_Economy * Car_Type.Rating_Fuel * 3)  +
 +    (Rating_Luxury * Car_Type.Rating_Luxury * 3) +
 +    (Rating_Performance * Car_Type.Rating_Performance * 3) +
 +    (Rating_Power * Car_Type.Rating_Power* 3) +
 +    (Rating_Safety * Car_Type.Rating_Safety* 3)
 +
 +
 +maxRating_CarType = (100*Car_Type.Rating_Cargo * 3)  +
 +    (100 * Car_Type.Rating_Dependability * 3)  +
 +    (100 * Car_Type.Rating_Drivability * 3) +
 +    (100 * Car_Type.Rating_Fuel * 3)  +
 +    (100 * Car_Type.Rating_Luxury * 3) +
 +    (100 * Car_Type.Rating_Performance * 3) +
 +    (100 * Car_Type.Rating_Power * 3) +
 +    (100 * Car_Type.Rating_Safety * 3)
 +
 +if(maxRating_CarType < 1)
 +    maxRating_CarType = 1;
 +
 +Rating_CarType = 100 * (Rating_CarType / maxRating_CarType)
 +
 +
 +</code>
 +
 +
 +==== Vehicle Image ====
 +
 +<code cpp>
 +
 +VehicleImg =  (Rating_CarType/75.0)  * (((IMAGE_GLOBAL_GENERAL*2) + IMAGE_QUALITY +
 +    IMAGE_WORK + (IMAGE_RACING/2.0))/4.5)
 +
 +//If making a trim
 +if(BaseModelImg>0)
 +{
 +    VehicleImg = BaseModelImg + ((Rating_CarType-BaseModelImg)/20.0)
 +
 +    BaseModelImg =0;
 +}
 +else //If Making New Generation
 +{
 +    tmpVImage = Get_Most_Recent_Vehicle_Image_By_Name()
 +
 +    if(tmpVImage > 0)
 +        VehicleImg= tmpVImage + ((Rating_CarType-tmpVImage)/20.0)
 +}
 +
 +if(VehicleImg>100)
 +    VehicleImg = 100
 +else if(VehicleImg< 0)
 +    VehicleImg = 0
 +
 +
 +</code>
 +
 +
 +===== Miscellaneous =====
 +
 +
 +
 +==== Unit Costs ====
 +
 +<code cpp>
 +Unit_Costs = ((((200*ex_1d02p_year99*((((Slider_Interior_Comfort^2 )+
 +    (Slider_Interior_Luxury^2) + (Slider_Interior_Safety^2) + (Slider_Interior_Technology^2) +
 +    (((Slider_Interior_Innovation^2) + (Slider_Interior_Style^2))/2.5))/3.5) +
 +    ((Slider_Design_Cargo^2 + Slider_Design_Dependability^2 + 
 +    Slider_Design_Safety^2 + Slider_Design_Style^2 +Slider_Design_Luxury^2)/4.0)+
 +    (( (Slider_Testing_Demographics^2 )+ (Slider_Testing_Performance^2 ) + 
 +    (Slider_Testing_FuelEconomy^2) + (Slider_Testing_Comfort^2) + (Slider_Testing_Utility^2)+
 +    (Slider_Testing_Reliability^2))/7.0) +  (((Slider_Materials_MaterialQuality^2 ) +
 +    (Slider_Materials_Techniques^2)+ (Slider_Materials_Interior^2) + 
 +    (Slider_Materials_Paint^2))/1.5))) * (Car_Type.Wealth_Index/3.0))*
 +    (global_interestrate/2.1))*carPriceRate) * designRandomVal +
 +    (130*ex_1d02p_year99*(Slider_Demographics_Wealth/5.0)) + 
 +    (150*ex_1d02p_year99*(Slider_Demographics_Wealth/10.0)*Slider_Testing_Demographics)
 +
 +
 +hyperSliders = ((Slider_Interior_Style + Slider_Interior_Innovation + Slider_Interior_Luxury +
 +    Slider_Interior_Comfort + Slider_Interior_Safety + Slider_Interior_Technology) +
 +    ( Slider_Materials_MaterialQuality + Slider_Materials_Interior + 
 +    Slider_Materials_Paint + Slider_Materials_Techniques) + ( Slider_Design_Style + 
 +    Slider_Design_Luxury + Slider_Design_Safety + Slider_Design_Cargo + 
 +    Slider_Design_Dependability) + ( Slider_Testing_Demographics + 
 +    Slider_Testing_Performance + Slider_Testing_FuelEconomy + 
 +    Slider_Testing_Comfort + Slider_Testing_Utility + Slider_Testing_Reliability))/21.0
 +
 +hyperCosts = 450 * ex_1d04p_year99 * (hyperSliders^4)
 +
 +
 +Unit_Costs = Selected_Chassis.Unit_Costs + Selected_Engine.Unit_Costs + Selected_Gearbox.Unit_Costs +
 +    Unit_Costs + hyperCosts - ((Unit_Costs/10) * (designBodySkill/100))
 +    
 +if( Game Difficult is set to Easy )
 +    Unit_Costs = Unit_Costs * 0.9
 +else if( Game Difficult is set to Hard or Nightmare )
 +    Unit_Costs = Unit_Costs * 1.1
 +    
 +    
 +</code>
 +
 +
 +==== Design Costs ====
 +
 +<code>
 +
 +Design_Costs = (hyperCosts * (400*ex_1d03p_year99)) + (Selected_Chassis.Unit_Costs*400 * ex_1d03p_year99 + 
 +    Selected_Engine.Unit_Costs*400 * ex_1d03p_year99+Selected_Gearbox.Unit_Costs * 400*ex_1d03p_year99 + 
 +    20000*ex_1d05p_year99 * ((Slider_Design_Cargo^2) + (Slider_Design_Dependability^2) +
 +    (Slider_Design_Luxury^2) + (Slider_Design_Safety^2) + (Slider_Design_Style^2 ) +
 +    (Slider_Interior_Innovation^2 ) + (Slider_Interior_Safety^2 ) + (Slider_Interior_Style^2) +
 +    (Slider_Testing_Comfort^2 *2 ) + (Slider_Testing_Demographics^2 * 2 )+ (Slider_Testing_FuelEconomy^2 * 2) +
 +    (Slider_Testing_Performance^2 * 2 )+ (Slider_Testing_Reliability^2 * 2) + (Slider_Testing_Utility^2 * 2))) +
 +    (40000*ex_1d03p_year99*(Slider_Demographics_Wealth/10.0) * Slider_Testing_Demographics)
 +
 +    
 +If creating a New Trim or New Generation, If this design's Design Requirements Rating is 
 +higher than the Base Model's Design Requirements, then you lose your discounts.
 +Otherwise, only a fraction of the design costs at this stage is charged. 
 +The fractions break down like this: 15% for base, 5% for a gearbox change, 
 +5% for an engine change, 75% for chassis change.
 +
 +
 +
 +Design_Costs = (Design_Costs/5)+((Design_Costs/1.25)*(Slider_Design_DesignPace^2*4.5))
 +
 +
 +if( Game Difficult is set to Easy )
 +    Design_Costs = Design_Costs * 0.9
 +else if( Game Difficult is set to Hard or Nightmare )
 +    Design_Costs = Design_Costs * 1.1
 +
 +
 +
 +</code>
 +
 +
 +==== Finish Time ====
 +
 +<code>
 +
 +Finish_Time = ((0.7*(Slider_Interior_Innovation+Slider_Interior_Style+Slider_Interior_Safety)) +
 +    (0.9*(Slider_Design_Cargo+(Slider_Design_Dependability*2) + Slider_Design_Cargo +
 +    Slider_Design_Luxury + Slider_Design_Safety + Slider_Design_Style)) +
 +    (1.5* (Slider_Testing_Comfort + Slider_Testing_Demographics +
 +    Slider_Testing_FuelEconomy + Slider_Testing_Performance + Slider_Testing_Reliability +
 +    Slider_Testing_Utility))) + 2*ex_1d005p_year99-
 +    (3*ex_1d005p_year99*(RnD_Skills/100.0))-
 +    (2*(FactOverallVAL/100.0)) + (1.25*ex_1d0035p_year99*hyperSliders)
 +
 +Finish_Time = Finish_Time + ((year-1870)/30)
 +
 +    
 +
 +If creating a New Trim or New Generation, If this design's Design Requirements Rating is 
 +higher than the Base Model's Design Requirements, then you lose all time discounts.
 +Otherwise, only a fraction of design time is charged. 
 +The fractions break down like this: 15% for base, 5% for a gearbox change, 
 +5% for an engine change, 75% for chassis change.
 +
 +
 +
 +if(Year < 2021)
 +{
 +    if(( Slider_Design_DesignPace + 0.05) > 0)
 +        additionalTime = ( ((year-1840)/15.0 ) *((0.5/( Slider_Design_DesignPace+0.05) ) -0.45) )
 +    else
 +        additionalTime = ( ((year-1840)/15.0 ) * 9.55 )
 +}
 +else
 +{
 +    if(( Slider_Design_DesignPace+0.05) > 0)
 +        additionalTime = ( ((2020-1840)/15.0 ) *((0.5/( Slider_Design_DesignPace+0.05) ) -0.45) )
 +    else
 +        additionalTime = ( ((2020-1840)/15.0 ) * 9.55 )
 +}
 +
 +if( Creating a trim and base model is completed )
 +{
 +    if(Slider_Design_DesignPace < 0.5)
 +        Finish_Time = Finish_Time +  additionalTime
 +    else if(additionalTime > 0)
 +    {
 +        turnsOff = (Slider_Design_DesignPace - 0.5)/0.2
 +        Finish_Time = Finish_Time +  (additionalTime - TurnsOff)
 +    }
 +}
 +
 +if(Finish_Time < 1)
 +    Finish_Time = 1
 +
 +
 +</code>
 +
 +
 +
 +==== Employees Required ====
 +
 +
 +<code cpp>
 +if(year < 2021)
 +    Employees_Required = Design_Requirements * (0.07833*(year-1899)+0.295)
 +else
 +    Employees_Required = Design_Requirements * (0.07833*(121)+0.295)
 +
 +
 +
 +Employees_Required = Employees_Required/5 + ((Employees_Required/1.2)*Slider_Design_DesignPace) + 3
 +</code>