======= 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 } }