======= Skills and Image Ratings =======
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 =====
^ Name ^ Description ^ ^ Name ^ Description ^
| **IMAGE_WORK** | Workmanship Image Rating | | **IMAGE_RACING** | Racing Image Rating | 
| **IMAGE_QUALITY** | Quality Image Rating | | **IMAGE_GLOBAL_GENERAL** | Global Image Rating | 
| **SKILL_MARKETING** | Marketing Skills | | **DESIGN_ENGINE** | Engine Design Skills | 
| **DESIGN_CHASSIS** | Chassis Design Skills | | **DESIGN_TRANSMISSION** | Gearbox Design Skills | 
| **DESIGN_BODY** | Body Design Skills | | **DESIGN_LUX** | Luxury Design Skills | 
| **DESIGN_SAFETY** | Safety Design Skills | | **SKILL_MANUFACTORING** | Manufacturing Skills | 
| **SKILL_ADMIN** | Administration Skills | | **SKILL_DEALER** | Dealership Skills | 
| **researchChassisEffect** | Chassis Research Teams Effect | | **researchEngineEffect** | Engine Research Teams Effect | 
| **researchGearboxEffect** | Gearbox Research Teams Effect | | **researchVehicleEffect** | Vehicle Research Teams Effect | 
| **CarInfo.Rating_Overall** | Current Vehicle's Overall Rating | | **CarInfo.Rating_Luxury** | Current Vehicle's Luxury Rating | 
| **CarInfo.Rating_Safety** | Current Vehicle's Safety Rating | | **CarInfo.designreq** | Current Vehicle's Design Requirements Rating | 
| **CarInfo.Rating_Quality** | Current Vehicle's Quality Rating | | **CarInfo.Rating_Dependability** | Current Vehicle's Dependability Rating | 
| **CarInfo.manureq** | Current Vehicle's Manufacturing Requirement Rating | | **CarInfo.Vehicle_Image** | Current Vehicle's Vehicle Image Rating | 
| **CarInfo.Rating_Drivability** | Current Vehicle's Drivability Rating | | **CarInfo.Rating_Performance** | Current Vehicle's Performance Rating | 
| **ChassisInfo.Overall_Comfort** | Chassis Comfort Rating | | **ChassisInfo.Overall_Strength** | Chassis Strength Rating | 
| **ChassisInfo.Overall** | Chassis Overall Rating | | **ChassisInfo.Req_Design** | Chassis Design Requirement Rating | 
| **ChassisInfo.Req_Manu** | Chassis Manufacturing Requirement Rating | | **ChassisInfo.Overall_Dependabilty** | Chassis Dependability Rating | 
| **ChassisInfo.Overall_Performance** | Chassis Performance Rating | | **Engine.Power** | Engine Power Rating | 
| **Engine.FuelEconomy** | Engine Fuel Economy Rating | | **Engine.OverallRating** | Engine Overall Rating | 
| **Engine.DesighnRequirements** | Engine Design Requirement Rating | | **Engine.Reliability** | Engine Reliability Rating | 
| **Engine.ManufacturingRequirement** | Engine Manufacturing Requirement Rating | | **Gearbox.PowerRating** | Gearbox Power Rating | 
| **Gearbox.FuelRating** | Gearbox Fuel Economy Rating | | **Gearbox.OverallRating** | Gearbox Overall Rating | 
| **Gearbox.Design_Requirement** | Gearbox Design Requirements Rating | | **Gearbox.ReliabiltyRating** | Gearbox Reliability Rating | 
| **Gearbox.Manufacturing_Requirement** | Gearbox Manufacturing Requirements Rating | | **Gearbox.PerformanceRating** | Gearbox Performance Rating | 
| **Number Of Cars** | The total number of cars designed in the last 5 years | | **RacingHistory.PlayerWins** | All company's racing wins in a series. | 
| **Racing.Popularity** | The popularity of the racing series | | **Marketing_*Efficency** | Marketing efficiency value, where * is the type of marketing | 
| **RacingRnDFocus** | Racing focus set to development, divided by the number of races, divided by 6. | | **** | |  
===== Value Assignments =====
current_ImgWork = IMAGE_WORK
current_ImgRace = IMAGE_RACING
current_ImgQual = IMAGE_QUALITY
current_ImgGlobal = IMAGE_GLOBAL_GENERAL
current_MarketingSkill = SKILL_MARKETING
current_DesignEngineSkills = DESIGN_ENGINE
current_DesignChassisSkills = DESIGN_CHASSIS
current_DesignGearboxSkills = DESIGN_TRANSMISSION
current_DesignBodySkills = DESIGN_BODY
current_DesignLuxSkills = DESIGN_LUX
current_DesignSafeSkills = DESIGN_SAFETY
manuSkill = SKILL_MANUFACTORING
adminSkill = SKILL_ADMIN
dealerSkill = SKILL_DEALER
effectCemps = researchChassisEffect
effectEemps = researchEngineEffect
effectGemps = researchGearboxEffect
effectVemps = researchVehicleEffect
for( Cars Year > Current Year - 3 )
{
    Workmanship = Workmanship + (TOTAL(CarInfo.Rating_Overall+(CarInfo.Rating_Luxury*21)+
        CarInfo.Rating_Safety+(CarInfo.designreq*2) ) +
        (ChassisInfo.Overall_Comfort+ChassisInfo.Overall_Strength+ChassisInfo.Overall+(ChassisInfo.Req_Design*2) ))
        
    workmanship_Quality = workmanship_Quality + (TOTAL( (CarInfo.Rating_Quality*3) + 
    (CarInfo.Rating_Dependability*3) + CarInfo.manureq + CarInfo.Rating_Overall ) + 
    ( (ChassisInfo.Overall_Dependabilty*3) +ChassisInfo.Overall_Strength+ChassisInfo.Req_Manu+ChassisInfo.Overall))
    
    workmanship_Racing = workmanship_Racing + (TOTAL(CarInfo.Rating_Performance*3 + 
        CarInfo.Rating_Drivability*3 ) +  TOTAL(ChassisInfo.Overall_Performance))
        
    workGlobal = workGlobal + TOTAL(CarInfo.Rating_Overall*10)
    
    counts = Number Of Cars * 25 + 5
    
    counts_Quality =  Number Of Cars * 8 + 6
    
    counts_Racing = Number Of Cars * 8 + 3
    
    counts_Global = Number Of Cars * 10
}
for ( Every Engine Design Year > Current Year - 3  )
{
    Workmanship = Workmanship + (Engine.FuelEconomy+Engine.OverallRating+(Engine.DesighnRequirements*2) )
    
    workmanship_Quality = workmanship_Quality + ( (Engine.Reliability*5) + Engine.OverallRating + Engine.ManufacturingRequirement )
    
    workmanship_Racing = workmanship_Racing + Engine.Power*5
    
    counts = counts + 4
    
    counts_Quality = counts_Quality + 7
    
    counts_Racing = counts_Racing + 6
}
                    
 
      
for ( Every Gearbox Design Year > Current Year - 3  )
{
    Workmanship = Workmanship + Gearbox.FuelRating+Gearbox.OverallRating+(Gearbox.Design_Requirement*2) ) 
    
    workmanship_Quality = workmanship_Quality + ( (Gearbox.ReliabiltyRating*5) +Gearbox.OverallRating+Gearbox.Manufacturing_Requirement )
    
    workmanship_Racing = (Gearbox.PerformanceRating*2+Gearbox.PowerRating*2)
    
    counts = counts + 4
    
    counts_Quality = counts_Quality + 7
    
    counts_Racing = counts_Racing + 5
}
//Race Results
for(Racing results over the last 6 years, using this trim or an car or engine from this trim)
{
    workmanship_Racing =  workmanship_Racing + TOTAL(RacingHistory.PlayerWins*Racing.Popularity)*0.3
}
	
for each racing championship over the last 6 years, using this trim or an car or engine from this trim
{
    workmanship_Racing = workmanship_Racing + 20;        
}
					
marketing_Effecents =  Average((Marketing_NewspaperEfficency + Marketing_BillboardsEfficency + 
    Marketing_MagsEfficency + Marketing_SportsEfficency + 
    Marketing_EventsEfficency + Marketing_RadioEfficency + 
    Marketing_TVEfficency + Marketing_InternetEfficency + Marketing_MiscEfficency)/6.0) * 100
===== Images =====
==== Workmanship ====
if(counts>0)
{
        workmanship_image = Workmanship/counts;
        if(workmanship_image > 110)
            workmanship_image = 110;
        if(workmanship_image > (current_Workmanship_Image+0.5) )
        {
            newImg = current_Workmanship_Image	+ 0.25 + (marketing_Effecents/3000.0) + ((workmanship_image-current_Workmanship_Image)/250.0)
            
            if(newImg > 100)
            {
                newImg = 100
            }
           IMAGE_WORK = NewImg
        }
        else if(workmanship_image
==== Quality ====
if(counts>0)
{
        adjust_image = workmanship_Quality/counts_Quality;
        if(adjust_image > 110)
            adjust_image = 110;
        if(adjust_image > (current_ImgQual+0.5) )
        {
            newImg = current_ImgQual	+ 0.25 + (marketing_Effecents/3000.0) + ((adjust_image-current_ImgQual)/250.0);
            
            if(newImg > 100)
            {
                newImg = 100;
            }
           IMAGE_QUALITY = NewImg
        }
        else if(adjust_image
==== Racing ====
	//Racing
if(Doing Racing)
{
        adjust_image = workmanship_Racing/counts_Racing;
        if(adjust_image > 100)
        {
            adjust_image = 100;
        }
        if(current_ImgRace <= 0)
            current_ImgRace = 1;
        if(adjust_image > current_ImgRace)
        {
            newImg = current_ImgRace + 0.25 + (marketing_Effecents/3000.0) + ((adjust_image-current_ImgRace)/250.0);
            if(newImg > 100)
            {
                newImg = 100;
            }
            IMAGE_RACING = newImg
        }
        else if(adjust_image<=current_ImgRace)
        {
            newImg = current_ImgRace -0.4+(marketing_Effecents/3000.0);
            if(newImg < 1)
            {
                newImg = 1;
            }
             IMAGE_RACING = newImg
        }
}
==== Global ====
Global_Total_Img = Global_Total_Img + ((current_ImgWork + current_ImgRace + current_ImgQual)*10);
counts_Global += 30;
//Global
if(counts_Global>0)
{
        adjust_image = Global_Total_Img/counts_Global;
            if(adjust_image > 100)
            {
                adjust_image = 100;
            }
        if(adjust_image>current_ImgGlobal+0.5)
        {
            newImg = current_ImgGlobal + 0.25 + (marketing_Effecents/3000.0) + ((adjust_image-current_ImgGlobal)/250.0);
            if(newImg > 100)
            {
                newImg = 100;
            }
            IMAGE_GLOBAL_GENERAL = newImg
        }
        else if(adjust_image
===== Skills =====
==== Marketing ====
if(marketing_Effecents > current_MarketingSkill * 0.6)
{
    current_MarketingSkill = current_MarketingSkill + 0.5 + ((marketing_Effecents-current_MarketingSkill)/10.0);
}
else if(marketing_Effecents < current_MarketingSkill * 0.6)
{
    current_MarketingSkill = current_MarketingSkill - 0.1;
}
if(current_MarketingSkill>100)
{
    current_MarketingSkill = 100;
}
else if(current_MarketingSkill < 0)
{
    current_MarketingSkill = 0.1;
}
SKILL_MARKETING = current_MarketingSkill
==== Manufacturing ====
Adjusted_Manufacturing = TOTAL( (1.35-Speed) * (Moral/100.0) * (Lines/1.35) ) From Non-Contract Lines
if(Adjusted_Manufacturing > (manuSkill*1.02))
{
    manuSkill = manuSkill+0.25+ ((Adjusted_Manufacturing-manuSkill)/250.0);
    
    if(manuSkill>100)
    {
        manuSkill = 100;
    }
    
    SKILL_MANUFACTORING=manuSkill
}
else if(Adjusted_Manufacturing < (manuSkill*0.98))
{
    manuSkill = manuSkill-0.25;
    
    if(manuSkill < 0)
    {
        manuSkill = 0.1;
    }
    
    SKILL_MANUFACTORING=manuSkill
}
==== RnD ====
Researching_Average = (effectCemps+effectEemps+effectGemps+effectVemps)/4.0;
    
RnDCounter =Number of designs started within in the last 2 years.
    
if(RnDCounter == 0)
{
        rndSkillChange = -0.08 + (Researching_Average/12.0);
}
else
{
        rndSkillChange = (RnDCounter) * 0.02 + (Researching_Average/12.0);
}
SET SKILL_RND = SKILL_RND + rndSkillChange
==== Administrative ====
For All Branches
{
    dealerFocus = TOTAL(Dealer_Resources)
    branchNumber =  COUNT(Branch_ID
    branchMorale = AVG(Employee_Moral) 
}
if((branchNumber/(numOfCities/1.5)) * 100 < (adminSkill * 0.9))
{
   SET SKILL_ADMIN = SKILL_ADMIN - 0.5
}
else if((branchNumber/(numOfCities/1.5)) * 100  > (adminSkill * 1.1) && branchMorale >= 98)
{
   SET SKILL_ADMIN = SKILL_ADMIN + 0.7 
}
==== Dealer ====
For All Branches
{
    dealerFocus = TOTAL(Dealer_Resources)
    branchNumber =  COUNT(Branch_ID
    branchMorale = AVG(Employee_Moral) 
}
if(branchNumber != 0)
    dealerFocus = (dealerFocus*100)/(branchNumber);
if(dealerFocus < (dealerSkill * 0.95))
{
    SET SKILL_DEALER= SKILL_DEALER - 0.3 
}
else if(dealerFocus > (dealerSkill))
{
    SET SKILL_DEALER= SKILL_DEALER + 0.5 
}
===== Design Skills =====
==== Engine ====
Self designed engines over the last 5 years.
{
    overallDesignRating = Average(Engine.OverallRating);
}
oldDesignSkill = current_DesignEngineSkills;
if(overallDesignRating > (current_DesignEngineSkills*1.02) AND current_DesignEngineSkills < 95.5)
{
    current_DesignEngineSkills = current_DesignEngineSkills + RacingRnDFocus;
    
    current_DesignEngineSkills = current_DesignEngineSkills + 0.25 +(0.65*effectEemps);
    
    SET DESIGN_ENGINE = current_DesignEngineSkills
}
else if(overallDesignRating<1)
{
    current_DesignEngineSkills = current_DesignEngineSkills + RacingRnDFocus;
    
    current_DesignEngineSkills = current_DesignEngineSkills - 0.1 + (0.4*effectEemps);
    
    if(current_DesignEngineSkills < 0.1)
        current_DesignEngineSkills = 0.1;
    
    SET DESIGN_ENGINE = current_DesignEngineSkills
}
else if(current_DesignEngineSkills < 101 && current_DesignEngineSkills > 1)
{
    current_DesignEngineSkills = current_DesignEngineSkills + RacingRnDFocus;
    
    current_DesignEngineSkills = current_DesignEngineSkills - 0.25 +(0.85*effectEemps);
    
    if(current_DesignEngineSkills < 0.1)
        current_DesignEngineSkills = 0.1;
    else if(current_DesignEngineSkills > 99.99)
        current_DesignEngineSkills = 99.99;
    SET DESIGN_ENGINE = current_DesignEngineSkills
}
==== Chassis ====
Self designed chassis over the last 5 years.
{
    overallDesignRating = Average(Chassis.OverallRating);
}
oldDesignSkill = current_DesignChassisSkills;
if(overallDesignRating > (current_DesignChassisSkills*1.02) && current_DesignChassisSkills < 95.5)
{
    current_DesignChassisSkills = current_DesignChassisSkills + RacingRnDFocus;
    
    current_DesignChassisSkills = current_DesignChassisSkills + 0.25+(0.65*effectCemps);
    
    SET DESIGN_CHASSIS = current_DesignChassisSkills
}
else if(overallDesignRating<1)
{
    current_DesignChassisSkills = current_DesignChassisSkills + RacingRnDFocus;
    
    current_DesignChassisSkills = current_DesignChassisSkills - 0.1 + (0.4*effectCemps);
    
    SET DESIGN_CHASSIS = current_DesignChassisSkills
}
else if(current_DesignChassisSkills < 101  && current_DesignChassisSkills > 1)
{
    current_DesignChassisSkills = current_DesignChassisSkills + RacingRnDFocus;
    
    current_DesignChassisSkills = current_DesignChassisSkills - 0.25+(0.85*effectCemps);
    
    if(current_DesignChassisSkills > 99.99)
        current_DesignChassisSkills = 99.99;
    SET DESIGN_CHASSIS = current_DesignChassisSkills
}
==== Gearbox ====
Self designed gearboxes over the last 5 years.
{
    overallDesignRating = Average(Gearbox.OverallRating);
}
pStmt->FreeQuery();
oldDesignSkill = current_DesignGearboxSkills;
if(overallDesignRating > (current_DesignGearboxSkills*1.02) && current_DesignGearboxSkills < 95.5)
{
   current_DesignGearboxSkills = current_DesignGearboxSkills + RacingRnDFocus;
   
   current_DesignGearboxSkills = current_DesignGearboxSkills + 0.25 +(0.65*effectGemps);
   
   SET DESIGN_TRANSMISSION = (current_DesignGearboxSkills)
}
else if(overallDesignRating<1)
{
    current_DesignGearboxSkills = current_DesignGearboxSkills + RacingRnDFocus;
    
    current_DesignGearboxSkills = current_DesignGearboxSkills - 0.1 + (0.4*effectGemps);
    
    SET DESIGN_TRANSMISSION = (current_DesignGearboxSkills)
}
else if(current_DesignGearboxSkills < 101 && current_DesignGearboxSkills > 1)
{
    current_DesignGearboxSkills = current_DesignGearboxSkills + RacingRnDFocus;
    
    current_DesignGearboxSkills = current_DesignGearboxSkills - 0.25+(0.85*effectGemps);
    if(current_DesignGearboxSkills > 99.99)
        current_DesignGearboxSkills = 99.99;
   SET DESIGN_TRANSMISSION = (current_DesignGearboxSkills)
}
===== Vehicle Design Skills =====
==== Body ====
For Every Vehicle Self Designed For This Marque In The Last 5 Years
{
    overallDesignRating = AVERAGE Rating_Overall
    
    if(overallDesignRating > (current_DesignBodySkills*1.02) AND current_DesignBodySkills < 95.5)
    {
       current_DesignBodySkills = current_DesignBodySkills + 0.25+(0.65*effectVemps);
        
       SET DESIGN_BODY = current_DesignBodySkills
    }
    else if(overallDesignRating == 0)
    {
        current_DesignBodySkills = current_DesignBodySkills - 0.1 + (0.4*effectVemps);
        
        SET DESIGN_BODY = current_DesignBodySkills
    }
    else if(current_DesignBodySkills < 101  AND current_DesignBodySkills > 1)
    {
        current_DesignBodySkills = current_DesignBodySkills - 0.25+(0.85*effectVemps);
        
        if(current_DesignBodySkills > 99.99)
            current_DesignBodySkills = 99.99;
        SET DESIGN_BODY = current_DesignBodySkills
    }
    
}
==== Luxury ====
For Every Vehicle Self Designed For This Marque In The Last 5 Years
{
    overallDesignRating = AVERAEG Rating_Luxury
    
    if(overallDesignRating > (current_DesignLuxSkills*1.02)  AND current_DesignLuxSkills < 95.5)
    {
        current_DesignLuxSkills = current_DesignLuxSkills + 0.25 +(0.65*effectVemps);
        
        DESIGN_LUX = current_DesignLuxSkills
    }
    else if(overallDesignRating==0)
    {
        current_DesignLuxSkills = current_DesignLuxSkills - 0.1 + (0.4*effectVemps);
        
        DESIGN_LUX = current_DesignLuxSkills
    }
    else if(current_DesignLuxSkills<101  AND current_DesignLuxSkills > 1)
    {
        current_DesignLuxSkills = current_DesignLuxSkills - 0.25 +(0.85*effectVemps);
        
        if(current_DesignLuxSkills > 99.99)
            current_DesignLuxSkills = 99.99;
        
        DESIGN_LUX = current_DesignLuxSkills
    }
    
}
==== Safety ====
For Every Vehicle Self Designed For This Marque In The Last 5 Years
{
    overallDesignRating = AVGERAGE Rating_Safety
    
    if(overallDesignRating > (current_DesignSafeSkills*1.02)  AND current_DesignSafeSkills < 95.5)
    {
        current_DesignSafeSkills = current_DesignSafeSkills + 0.25 +(0.65*effectVemps);
        
        DESIGN_SAFETY = current_DesignSafeSkills
    }
    else if(overallDesignRating==0)
    {
        current_DesignSafeSkills = current_DesignSafeSkills - 0.1 + (0.4*effectVemps);
        
        DESIGN_SAFETY = current_DesignSafeSkills
    }
    else if(current_DesignSafeSkills<101  AND current_DesignSafeSkills > 1)
    {
        current_DesignSafeSkills = current_DesignSafeSkills - 0.25 +(0.85*effectVemps);
        
        if(current_DesignSafeSkills > 99.99)
            current_DesignSafeSkills = 99.99;
        
        DESIGN_SAFETY = current_DesignSafeSkills
    }
}
===== Vehicle Image =====
==== Vehicle Image ====
newVehicleImg = 0;
movementAmount = 0;
marketingEffect = AVERAGE (Marketing_NewspaperEfficency + Marketing_BillboardsEfficency + 
                    Marketing_MagsEfficency + Marketing_SportsEfficency + Marketing_EventsEfficency +
                    Marketing_RadioEfficency + Marketing_TVEfficency + Marketing_InternetEfficency + Marketing_MiscEfficency)
For Every Active Vehicle:
{
    currentVehicleIMG = CarInfo.Vehicle_Image
    if( (CarInfo.CarTypeRating+ CarInfo.Rating_Dependability*3+CarInfo.Rating_Quality*2) / 6.0 > currentVehicleIMG*1.2)
    {
        newVehicleImg = currentVehicleIMG + (0.25 + ((CarInfo.Rating_Dependability*3+CarInfo.Rating_Quality*2)/2000.0) +
            (((current_ImgGlobal*2) + current_ImgQual  + current_ImgWork + marketingEffect+  (current_ImgRace/2.0))/2200.0)); //.35 to  .6 Max
    }
    else if((CarInfo.CarTypeRating+CarInfo.Rating_Dependability*3+CarInfo.Rating_Quality*2) / 6.0< currentVehicleIMG * 0.85)
    {
        newVehicleImg = currentVehicleIMG + (-0.50  + ((CarInfo.Rating_Dependability*3+CarInfo.Rating_Quality*2)/2000.0)+
            (((current_ImgGlobal*2) + current_ImgQual  + current_ImgWork + marketingEffect +  (current_ImgRace/2.0))/2200.0)); //-.4 to -.15
    }
    else
    {
        newVehicleImg = currentVehicleIMG + (-0.25  + ((CarInfo.Rating_Dependability*3+CarInfo.Rating_Quality*2)/5000.0) +
            (((current_ImgGlobal*2) + current_ImgQual  + current_ImgWork + marketingEffect +  (current_ImgRace/2.0))/1100.0)); //-.20 to .30
    }
    movementAmount = (newVehicleImg-currentVehicleIMG)/4.0;
    newVehicleImg = (Random Number Between (0 and movementAmount)) + currentVehicleIMG;
    if(newVehicleImg <=1)
    {
        newVehicleImg = 1;
    }
    else if(newVehicleImg >= 100)
    {
        newVehicleImg = 100;
    }
    if(currentVehicleIMG DOES NOT EQUAL newVehicleImg)
    {
        VehicleImg = newVehicleImg
    }
}