Large scale overhaul of the vanilla Motorsport Manager experience, adding more challenge and intrigue to the race days with balancing and AI enhancements. Continually being worked on to make Motorsport Manager the best version of itself.
Other user's assetsAll the assets in this file belong to the author, or are from free-to-use modder's resources
Upload permissionYou are not allowed to upload this file to other sites under any circumstances
Modification permissionYou must get permission from me before you are allowed to modify my files to improve it
Conversion permissionYou are not allowed to convert this file to work on other games under any circumstances
Asset use permissionYou must get permission from me before you are allowed to use any of the assets in this file
Asset use permission in mods/files that are being soldYou are not allowed to use assets from this file in any mods/files that are being sold, for money, on Steam Workshop or other platforms
Asset use permission in mods/files that earn donation pointsYou are not allowed to earn Donation Points for your mods if they use my assets
Author notes
This author has not provided any additional notes regarding file permissions
File credits
Credit to: TheFlamingRed - Rebirth 1.54 is where this project came from. He has also given me extensive guidance throughout my journey. He also collated some vanilla bug fixes which are incorporated into this project. Moe - He wrote some of the first AI improvements, which I have rewritten since, and gave me permission to use his work when starting this project. MrRandom - Provided some bug fixes which are incorporated into this project Rob - Provided enthusiasm and interest in the early days of the mod that have allowed me to get this far.
Donation Points system
Please log in to find out whether this mod is receiving Donation Points
Changelogs
Version n21
[AI]
- [All Series] Reduced wet weather lookahead when changing tyres and refuelling is off, in line with small tanks (SessionStrategy -> TyresForNoRefuelling())
- [All Series] AI desired pit laps are now updated as soon as the car enters the Pit Box Exit path type (Vehicle -> OnEnterPath(), SessionStrategy -> OnEnterGate())
[Gameplay]
- [All Series] Not all teams can appear in all series, created lists for each discipline for allowed teams when rebranding (TeamManager -> GetValidRebrandTeamIDs(), TeamManager -> TeamRebrand())
- [All Series] Already scheduled pit stops are cancelled if the chequered flag is waved before the car enters the pit lane (SessionStrategy -> OnEnterGate())
- [Single Seaters] The simple standings tower now displays the gap to the car ahead, instead of the gap to the leader (SimpleStandingsEntry -> UpdateSessionData())
- [All Series] Reserve drivers who stand in for an injured driver will start at the worse of the two driver's championship standings (SessionSimulation -> GetStandingsForQualifying())
- [All Series] Drivers who are promoted to a race seat after the season has begun will take a 6 place grid penalty per race they missed, and carry it for the remainder of the season (SessionSimulation -> GetStandingsForQualifying())
- [All Series] Fastest lap points are now only awarded if the driver finishes in the top 10 (RaceEventResults -> ApplyPoints())
- [All Series] Fastest lap should now only award a single point (PoliticalImpactPoints -> SetImpact())
- [All Series] Pole position should now only award a single point (PoliticalImpactPoints -> SetImpact())
- [All Series] Tracks being added to the calender should now be randomly inserted, rather than always at the end (PoliticalImpactChangeTrack -> SetImpact())
- [All Series] Tracks that are in the new banned locations list for a series will no longer appear for voting (ChampionshipManager -> OnStart(), Championship -> bannedLocations, PoliticalImpactChangeTrack -> GenerateTrackData())
- [All Series] Votes to add or remove tracks are now more or less likely based on how close the series is to the minimum or maximum allowable races per season (PoliticalImpactChangeTrack -> CanTrackImpactBeApplied())
- [Player Series] The player should no longer be able to choose a vote which would allow a banned circuit to be voted in (PoliticsPlayerVoteStageChooseDetails -> UpdateCircuitsList())
[Bug Fixes]
- [All Series] The lap for the current vehicle is now updated to the leader's lap when they have been lapped, as intended (SessionStrategy -> TyresForSmallTanks())
- [All Series] Cars should no longer schedule a pit stop when the chequered flag has been waved (SessionStrategy -> DoesVehicleNeedToPit())
- [All Series] Cars classed as in the safety car train will now have reduced cornering speed if they are too close to the car ahead (TrackLayoutSpeedController -> GetCorningSpeed())
[Other]
- [Endurance] Added an extra set of desired lap displays to allow the player to set a future desired lap and have the AI handle double stinting drivers for them (SessionStrategy -> isDoubleStint, SessionHUD -> GenerateCustomButtons(), SessionStrategy -> SetDesiredPitLapEndurance(), DrivingStyle -> EnduranceAIDrivingStyle(), Fuel -> EnduranceAIEngineMode())
- [All Series] All newly added teams now have sponsors at game start (Assets -> Sponsors)
- [All Series] Added a new property to Championships so that lists of banned circuits can be set up, to prevent specific circuits appearing in the desired series (Assets -> Championships)
- The counter for number of races missed through illness is reset at the start of a new season (Driver -> OnSeasonStart())
- [All Series] Added new properties to Championships so that a minimum and maximum amount of races per season can be defined (Assets -> Championships)
- Updated frontend so that the bonus points rules show the new amount (Assets -> Frontend)
- The UI will now account for when the fastest lap holder is not in the top 10, and the live championship standings will not count it (RaceEventResults -> CalculateLivePoints(), RaceEventResults -> GetLivePoints(), SessionHUBStandingsScreen -> PredictDriverStandings(), SessionHUBStandingsScreen -> PredictTeamStandings())
Version n20
[AI]
- [Endurance] Added new conditions when the AI are setting up their pit stop under the safety car (SessionStrategy -> PlanPitstop())
- [Endurance] Added new conditions to check whether the AI should schedule a stop under the safety car (SessionStrategy -> DoesVehicleNeedToPit())
- [Endurance] Added return statement that forces the AI to refuel to 3 laps of fuel when pitting under the safety car (SessionStrategy -> CalculateDesiredFuelLapsEndurance())
- [Endurance] Added an explicit statement to cancel any planned pit stops when the safety car comes out (SessionStrategy -> OnEnterGate())
- [Endurance] Vehicles are no longer classed as experiencing a critical issue when out of fuel while the safety car is out, for the purposes of properly handling emergency fuel stops (Fuel -> SimulationUpdate())
- [Endurance] Vehicles are no longer classed as experiencing a critical issue when their tyres are worn out, or have some other tyre issue, while the safety car is out, for the purposes of properly handling emergency tyre changes (TyrePerformance -> SimulationUpdate())
- [All Series] The AI will now have a 3 lap lookahead for their desired lap when the safety car is out (SessionStrategy -> DoesVehicleNeedToPit())
- [All Series] The AI are biased towards the lap before their desired lap when selecting an offset desired lap, when the track is drying, when they clash with their teammate's desired lap (SessionStrategy -> UpdateDesiredPitLap())
- [All Series] Reduced AI lookahead when selecting a new tyre with small fuel tanks (SessionStrategy -> TyresForSmallTanks())
- [Single Seaters] The AI have the ability to pit early returned to them (SessionStrategy -> MakeEarlyStop())
[Gameplay]
- [Endurance] Increased chance for a vehicle to crash (AIRacingBehaviour -> OnEnterGate())
- [Endurance] Swapped the divisor for Engine/Gearbox and Brakes/Suspension mechanical issue chance (CarPartCondition -> GetNextConditionLoss())
- [Endurance] Increased base deg steps for 12h and 24h races to 14 and 18, respectively (Assets -> EnduranceDesignData)
- [Endurance] Reduced base deg steps for 6h races to 10 (Assets -> EnduranceDesignData)
- [Endurance] The "Pit" button is now removed when the SC is called (DriverActionButtons -> UpdatePitButtonAvailability())
- [Endurance] The "Pit" button is restored when this vehicle has fewer than 3 laps of fuel remaining while the SC has 1 full lap remaining (DriverActionButtons -> UpdatePitButtonAvailability())
- [Endurance] The "Pit" button is restored when this vehicle has a critical tyre issue (low condition, wrong tyre, lost wheel, puncture) (DriverActionButtons -> UpdatePitButtonAvailability())
- [Endurance] The "Pit" button is restored when this vehicle has a critical part issue (DriverActionButtons -> UpdatePitButtonAvailability())
- [Endurance] Specific pit tasks are removed from the pit stop screen when the safety car is active and they do not meet the conditions for an emergency stop (UIPitOptionSelectionWidget -> SetActiveOptionsObject())
- [Endurance] The fuel level when refuelling under the safety car is a maximum of 3 laps, higher values will be ignored (SessionPitstop -> SetTargetFuelLevel())
- [All Series] Vehicles will now have their collisions removed when they are in the safety car train to enable cars being waved through to pass (AISafetyFlagBehaviour -> SimulationUpdate())
- [All Series] Vehicles will now have their collisions restored once the safety car period has ended (AISafetyFlagBehaviour -> OnExit())
- [All Series] Every team now generates a "development rate" for every part at the beginning of the season, this dictates how much performance they can gain from part development (Team -> OnNewSeasonStart(), Team -> GenerateDevelopmentRates(), Team -> GenerateDevelopmentRateForPart())
- [All Series] Designers now have an experience stat in all areas of car development, which influences development rate for the season, and variation on finished parts (EngineerManager -> AddPeopleFromDatabase(), EngineerManager -> SetGameStartExperience())
- [All Series] Regen Designers should start with 0 to 25 experience in all areas of car development (EngineerManager -> PopulateWithRandomData())
- [All Series] A "development variance" is applied to parts on completion, meaning the parts you get will not always match the planned values (CarPart - AddAllComponentStats(), CarPart -> AddAllComponentStatsPlayer(), CarPart -> GetPartDevelopmentVariance())
- [Endurance] The simple standings tower now shows gap to ahead (SimpleStandingsEntry -> UpdateSessionData())
- [Endurance] The simple standings tower will show +X Laps when the car ahead is physically greater than 1 lap ahead (SimpleStandingsEntry -> UpdateSessionData())
- [Endurance] The gap to the car ahead on the simple standings tower will be replaced with "OUT" if the car has crashed or retired (SimpleStandingsEntry -> UpdateSessionData())
- [Single Seaters] The gap to the leader on the simple standings tower will be replaced with "OUT" if the car has crashed or retired (SimpleStandingsEntry -> UpdateSessionData())
- [All Series] The gap to the leader on the complex standings will be replaced with "OUT" if the car has crashed or retired (StandingsEntry -> SetVehicle())
- [All Series] The gap to ahead on the complex standings will be blank if the car has crashed or retired (StandingsEntry -> SetVehicle())
- [Endurance] The 'Fired Up!' tag is no longer displayed on the standings tower (StandingsEntry -> SetVehicleStatusLabel())
- [All Series] The player can no longer see the battery charge level of AI teams in the detailed standings tower (StandingsEntry -> SetVehicle(), FullStandingsDropdown -> OnEnable())
- [All Series] Removed the engine mode and driving style indicators from the detailed standings tower (StandingsEntry -> SetVehicle())
- [All Series] An email is sent at game start detailing your expected development rate for the first season (DialogSystem -> OnStartGameMessages())
- [All Series] An email is sent at season start detailing your expected development rate for the season (PreSeasonState -> OnExit())
- [Endurance] Added 'Player Driver' strategy for Endurance, the desired lap will automatically be set for the factor that covers the fewest laps - tyre life, driver laps, fuel laps (SessionStrategy -> SetDesiredPitLapEndurance())
- [All Series] Reduced the chance for a vehicle to crash (CrashDirector -> VehicleWillCrash())
- [Single Seaters] Reduced the chance of car-to-car collisions (Vehicle -> UpdateCollisionWithVehicle())
- [All Series] Reduced the chance of car-to-car collisions on straights (Vehicle -> UpdateCollisionWithVehicle())
[Bug Fixes]
- [All Series] Mini tyre history now creates a new stint even when the tyres have not been changed (SessionTimer -> OnExitPitlane())
- [All Series] Variable to track whether an overtake has been rolled for the next corner is now being reset on the straights again (AIRacingBehaviour -> OnEnterStraight())
- [All Series] Corrected conditions that allowed for two different tyre types to trigger the selection of a fuel load based on slick tyres (SessionStrategy -> CalculateDesiredFuelLaps())
[Other]
- Refactored some code (SessionStrategy -> OnEnterGate())
- Created new method to handle the availability of the "Pit" button when in a race (DriverActionButtons -> UpdatePitButtonAvailability())
- Replaced some standard code for making the "Pit" button available with a call to the new method (DriverActionButtons -> OnUpdate())
- Created a new method that allows collisions to be turned on or off (allows car models to intersect) (Vehicle -> AdjustCollisionBounds())
- Created a new method to clear the collision points array when generating new collision points (CollisionBounds -> ClearPoints())
- Created a new variable to track if collisions are off for the current vehicle (AISafetyFlagBehaviour -> collisionBoundsRemoved)
- Created a new variable to track if collisions are on for the current vehicle (AISafetyFlagBehaviour -> collisionBoundsRestored)
- Created a new variable to track for wave throughs for the current vehicle, while under the safety car, so that cars already in the train will ignore them when checking their distances to the car ahead (AISafetyFlagBehaviour -> isGettingWaveThrough)
- Added new properties to Designers so starting experience in various part development can be set (Assets -> Engineers)
- New line added in Frontend to enable the "Progress:" text to be replaced with "Experience:" (Assets -> Frontend)
- Created a new method to obtain the development rate for the required part type when selecting part components (CarPartDesign -> GetDevelopmentRateForPart())
- Included GetDevelopmentRateForPart as an argument in the relevant method (CarPartDesign -> ApplyComponents())
- Added new arguments to some methods so that required values can be passed through (CarPart - AddAllComponentStats(), CarPart -> AddAllComponentStatsPlayer(), CarPart -> AddComponentStats(), CarPart -> AddAllComponentStatsPlayer(), CarPartComponent -> ApplyStats(), CarPartComponent -> ApplyStatsPlayer())
- Moved the custom buttons to their own method (SessionHUD -> OnGUI(), SessionHUD -> GenerateCustomButtons())
- Moved the time of day display to its own method (SessionHUD -> OnGUI(), SessionHUD -> GenerateTimeOfDayDisplay())
- Moved the onscreen debug output to its own method (SessionHUD -> OnGUI(), SessionHUD -> GenerateOnscreenDebugOutput())
- Added support for 2560x1440, 3840x2160, 3200x1800, 1600x900, 3840x1080, 5120x1440, 2560x1080 (SessionHUD -> GenerateCustomButtons(), SessionHUD -> GenerateTimeOfDayDisplay())
- [Endurance] Added new variables to allow for the special conditions on pitting under the safety car (SessionStrategy -> emergencyPitForFuel, SessionStrategy -> emergencyPitForTyres, SessionStrategy -> emergencyPitForCriticalIssue)
- The Designer's experience stat for a specific area of car development in the player's series is now shown on the hover when viewing their stats (DriverStatsModifiersRollover -> SetupIncreasingStat())
- Created a new method to handle applying the correct experience value to Designers at game start (EngineerManager -> SetGameStartExperience())
- Added new properties for the development rates (Team -> brakesDevelopmentRate, Team -> engineDevelopmentRate, Team -> frontWingDevelopmentRate, Team -> gearboxDevelopmentRate, Team -> rearWingDevelopmentRate, Team -> suspensionDevelopmentRate)
- Added new property for the average development rate across all parts, for triggering the correct development rate email (Team -> averageDevelopmentRate)
- Reduced the base min stat for IEC-A to 0 so that the performance bars appear properly (Assets -> Parts)
- Added new properties to circuits for handling bespoke min and max overtake roll durations (Assets -> Locations)
- Added new properties to Circuit (Circuit -> minOvertakeCorners, Circuit -> maxOvertakeCorners)
- Overtake rolls now use the new min/max overtake corner values for the current track when a successful roll is made (AIRacingBehaviour -> CheckForOvertakeOpportunity())
- [All Series] Reduced the threshold before a car is considered lapped (SessionStrategy -> GetPreciseLapsRemaingingForVehicle())
- Made a small change to lookahead when checking for how many laps there are until the tread change (SessionStrategy -> LapsUntilDriverWantsToPitForNewTread())
- Cars that are side-by-side in a corner and see each other as the car ahead will take a reduced cornering speed penalty (TrackLayoutSpeedController -> GetCorningSpeed())
Version n18
[AI Logic]
- Cars now ignore those who are out of the race, when working out how many places they expect to lose with the given delta (SessionTimer -> GetPositionLossAtDelta())
- Created new refuelling logic for 40% tanks (SessionStrategy -> CalculateDesiredFuelLaps())
- Removed bottom bound for fuel saving when refuelling is on (Fuel -> SetRacingAIEngineMode())
- Added modifier for setting new desired pit laps for when the Safety Car is on track (SessionStrategy -> SetDesiredPitLap())
- Added modifier for updating the desired pit lap for when the Safety Car is on track (SessionStrategy -> UpdateDesiredPitLap())
- The AI now do an update to their desired pit lap when the Safety Car is initially called (SessionStrategy -> OnSafetyCarEvent())
- Reduced the strength of the adjusted aggression multiplier (Team -> GetAdjustedAggression())
- The AI will now only do an update for their desired lap when they are 10 gates from the pit lane entry (SessionStrategy -> OnEnterGate())
- The AI will do a check for making a pit stop when they are not in the Safety Car train and are 10 gates from the pit lane entry (SessionStrategy -> OnEnterGate())
- Reworked AI lookahead when selecting tyres on 40%, which should allow them to be more accurate and cover more marginal situations (SessionStrategy -> TyresForSmallTanks())
- Decreased the estimated maximum outlap time when calculating AI wait duration in qualifying (GaragePathState -> SetWaitDuration())
- Added new method to some strategy calculations (SessionStrategy -> UpdateDesiredPitLap(), SessionStrategy -> SetDesiredPitLap(), SessionStrategy -> CalculateDesiredFuelLaps())
[Gameplay]
- Returned car-to-car collision chance to n16 levels (Vehicle -> UpdateCollisionWithVehicles())
- Tyre time cost curves are now normalised whenever bonus laps are awarded for the chassis Tyre Wear stat, or driver Smoothness (SessionStrategy -> SetPerformanceLevel(), SessionStrategy -> AdjustTyreTimeCostBandsForExtraLaps())
- Adjusted some tyre time costs (Assets -> SingleSeaterDesignData)
- Reduced the slipstream bonus gains by 30%, the maximum bonus is unaffected (DrivingStyle -> SetSlipstreamBonus())
- Reduced the minimum distance before a car starts gaining the slipstream bonus (DrivingStyle -> SetSlipstreamBonus())
- Increased the minimum speed before a car starts gaining the slipstream bonus (DrivingStyle -> SetSlipstreamBonus())
- Successful overtake rolls are now immediately cancelled if the Safety Car comes out, or the sector has a yellow flag (AIOvertakingBehaviour -> SimulationUpdate())
- Reduced performance catchup maximum spread to 200 points per part (CarManager -> PerformanceCatchup())
- Reduced the trigger point of performance catchup to 250 points per part (CarManager -> PerformanceCatchup())
- Increased the distance slightly at which a car will try to move off line to overtake when a successful overtake roll has been made on the car ahead (AvoidanceSteeringBehaviour -> ShouldWriteAvoidanceToMap())
- Increased the distance before the next braking gate slightly at which a car will try to move back in behind the car ahead when they have more speed on a straight but have not made a successful overtake roll and are not beside an opponent (AvoidanceSteeringBehaviour -> ShouldWriteAvoidanceToMap())
- Driver car opinions will now change when the other car has parts fitted or removed to prevent abuse of the car opinion system (credit someone2040) (Car -> refreshDriverOpinion, Car -> UnfitPart(), CarManager -> RefreshOpinions())
- Reduced the required tyre time cost delta to score maximum points for this factor in overtake rolls (OvertakeDirector -> CalculateOvertakeAttempt())
- Cars should no longer move off line if the car ahead is already trying to avoid an obstacle, and they have not already moved off line (AvoidanceSteeringBehaviour -> ShouldWriteAvoidanceToMap())
- Reduced the cornering speeds of both cars when a successful overtake is occuring (TrackLayoutSpeedController -> GetCorningSpeed())
- Cars on their in or out laps, but not currently yielding, will corner at a lower speed (TrackLayoutSpeedController -> GetCorningSpeed())
- Reduced the range at which dirty air will slow the car behind (TrackLayoutSpeedController -> GetCorningSpeed())
- Reduced the cornering speed of cars on their flying laps if they are next to a yielding car in a corner (TrackLayoutSpeedController -> GetCorningSpeed())
- When a car is next to the defending car at the moment an overtake roll is made, their score is doubled (OvertakeDirector -> CalculateOvertakeAttempt())
- Slightly increased the range for the 40% bonus to an attacker's score when making an overtake roll (OvertakeDirector -> CalculateOvertakeAttempt())
- Reduced the time cost multiplier at Black Sea E (Circuit -> SetTimeCostMultiplier())
- Slightly decreased the overtake attempt rejection rate for Medium, Hard, and Extreme rated tracks (OvertakeDirector -> CalculateOvertakeAttempt())
- Cars passing those being blue flagged are now slowed down less (TrackLayoutSpeedController -> GetCorningSpeed())
- Cars being blue flagged are now seen as potential obstacles and passing cars should now be less likely to be obstructed (AvoidanceSteeringBehaviour -> ShouldWriteAvoidanceToMap())
- Overtake rolls are now only done 15 gates before the next braking gate (AIRacingBehaviour -> OnEnterGate(), AIRacingBehaviour -> OnEnterStraight(), AIRacingBehaviour -> OnEnterCorner())
[Bug Fixes]
- Added a condition so that cars which are considered to be experiencing a critical issue are no longer considered for speed reductions in corners when they are the car ahead (TrackLayoutSpeedController -> GetCorningSpeed())
- (Bug fixed long ago, not sure if it was in a changelog) The leader will no longer randomly follow the safety car into the pits when it pulls into the pits at the end of the safety car period (CircuitScene -> SetPathIDs())
- Erikson now has the correct pip colour on the standings and in menus (Assets -> Team Colours)
- Penalties that were ultimately not given are now not shown on the post-race results screen (better fix than I did for n17, credit someone2040) (SessionPenalty -> SetState())
- Season form comparison between drivers now works (credit someone2040) (DriverForm -> GetAverageFormForYear(), UIDriverPerformanceWidget -> CompareSeasonForm())
- Corrected radio messages about other cars using the incorrect short team names (credit someone2040) (TeamManager -> OnStart(), TeamManager -> ValidateTeamData(), TeamManager -> TeamRebrand())
- Team nationality flags are now correctly generated at game start for the randomised Rebirth teams (credit someone2040) (TeamManager -> OnStart())
- AI should no longer fit bad parts that they end up endlessly repairing (credit someone2040) (CarManager -> AutoFit())
- Fixed game crash that would happen when a specific trait was rolled on new drivers (credit someone2040) (PersonalityTraitSpecialCaseBehaviour -> CanBeApplied())
- Spec parts should no longer gain additional max performance when parts are adapted for the next season (CarManager -> SetMechanicsContribution())
[Other]
- Created new method to calculate laps remaining on the passed tyre, rather than manually calculating it every time it is required (TyreSet -> CalculateLapsRemainingOnTyre())
- Added a new property onto Vehicle to enable tracking whether a car is avoiding an obstacle (Vehicle -> isAvoiding)
- Converted slipstream bonus gains to a Lerp so that it builds linearly with decreasing distance when the car is within range of the one ahead (DrivingStyle -> SetSlipstreamBonus())
- Removed attempted fix to stop penalties that were, ultimately, not given from being shown on the post-race results screen (PenaltyDirector -> SetTimePenalty(), PenaltyDirector -> SetDriveThruPenalty())
- Created method to allow the AI to work out whether the current tread can be used to get to the end of the race (SessionStrategy -> CanTreadRunToFinish())
Version n17
[AI Logic]
- None
[Gameplay]
- Reduced time cost multiplier at Vancouver A (Circuit -> SetTimeCostMultiplier())
- Increased time cost multiplier at Singapore (Circuit -> SetTimeCostMultiplier())
- Decreased time cost multiplier at all Yokohama layouts (Circuit -> SetTimeCostMultiplier())
- Reduced slipstream power at all locations (DrivingStyle -> SetSlipstreamBonus())
- Slipstream power at Phoenix is now set to Milan levels (DrivingStyle -> SetSlipstreamBonus())
- The AI Difficulty slider now instead applies a nerf to all player built parts (0% nerf at 0, 50% nerf at 20), rather than a boost to AI built parts, as it was causing extreme performance spread (CarPartComponent -> OnPartBuilt())
- Removed all additional bonuses from the chassis quality (CarPartDesign -> SetBaseStats(), NextYearCarDesign -> UpdatePartsReliability())
- Implemented initial code to allow lapped cars to unlap themselves when the safety car comes out (AISafetyFlagBehaviour -> SimulationUpdate())
- Reduced the scalars for cornering stats and brakes (SessionPerformance -> CalculateCarStats(), Assets -> SingleSeaterDesignData)
- Downgraded the overtaking difficulty at Phoenix C to Easy (Circuit -> SetOvertakingDifficulty())
- Newly generated starting parts at the performance reset are now identical for both cars (CarManager -> ResetParts())
- Agreed contracts now have their expiry date set to the number of days remaining in the year, plus 7 days (ContractManagerPerson -> EvaluateContract())
- The player should not get the hurry up email when an agreed contract is about to expire until 3 days before the expiry date (ContractManagerPerson -> EvaluateContract())
- Reduced dirty air strength (TrackLayoutSpeedController -> GetCorningSpeed())
- Increased successful overtake roll minimum and maximum duration (AIOvertakingBehaviour -> SimulationUpdate())
- Added the fast pit lane rule to the banned list for every series - track specific speed limits take the place of this rule (Assets -> Championships)
[Bug Fixes]
- (n16) Corrected issue where the performance catchup method was creating and then destroying a part (CarManager -> PerformanceCatchup())
- (n16) Corrected issue where the performance catchup would run every month (Team -> OnDayEnd())
- (n16) Corrected issue where cars would be reported as close to another even though they were on the other side of the track (PathController -> FindNearbyObstacles())
- Penalties that were ultimately not given should no longer be shown on the results screen (PenaltyDirector -> SetTimePenalty(), PenaltyDirector -> SetDriveThruPenalty())
- Maximum performance values used for catchup are now reset prior to running catchup (Team -> OnDayEnd(), Championship -> ResetPerformanceMinMaxBeforeCatchup())
[Other]
- Removed WriteLine from AIRacingBehaviour -> OnEnterGate()
- Removed WriteLine from PathData -> CalculateCorners()
- Removed WriteLine from SessionStrategy -> CalculateDesiredFuelLaps()
- Removed WriteLine from SessionStrategy -> DoesVehicleNeedToPit()
- Removed WriteLine from Team -> OnPreSeasonStart()
- Erikson Turismo Team now have a unique colour palette, all Rebirth teams have now been done (Assets -> Team Colours)
- The 'Fuel Burn' information for tracks has been changed to show the expected overtaking difficulty (credit someone2040) (TravelArrangementsScreen -> OnEnter(), UIEventCalendarTrackInfo -> SetDetails(), UITopBarTrackDetailsWidget -> Refresh())
- Added line to enable 'Overtake Difficulty' to be displayed where required (Assets -> Frontend)
- Moved acceptable livery layout lists for each car type out of the rebrand method so they are not always being defined whenever the method runs (GameStatsConstants)
- Created a new method to handle the livery selection for the new season (Team -> SelectNewLiveryForSeason())
- New livery selection will now occur on the day pre-season ends (Team -> OnPreSeasonEnd())
- Sessions now start with the track lighting on if the weather conditions or time of day warrants it (EnvironmentManager -> ControlStormyWeatherLights(), EnvironmentManager -> PrepareForSession())
Version n16
[AI Logic]
- The AI will stop using excess tyre life when they have 1 lap overhead and there is no-one nearby to attack or defend from (DrivingStyle -> SingleSeaterAIDrivingStyle())
[Gameplay]
- The player can no longer see the current ERS charge of other teams in the standings (StandingsEntry -> SetVehicle())
- The player can no longer see which ERS mode opponents are using (SimpleStandingsEntry -> SetVehicle(), StandingsEntry -> SetVehicle())
- Adjusted distance at which a car's cornering speeds are adjusted by an attacking car (TrackLayoutSpeedController -> GetCorningSpeed())
- Adjusted distance at which a car's cornering speeds are adjusted when attacking another car (TrackLayoutSpeedController -> GetCorningSpeed())
- Decreased pit lane speed at Doha (Circuit -> SetPitLaneSpeedAdjuster())
- Increased pit lane speed at Phoenix (Circuit -> SetPitLaneSpeedAdjuster())
- Decreased pit lane speed at Singapore (Circuit -> SetPitLaneSpeedAdjuster())
- Turned runwides back on (RunningWideDirector -> CanRunWide(), AIRacingBehaviour -> OnEnterGate())
- First corner runwides are now decided using the same logic as normal runwides (RunningWideDirector -> CanRunWideOnFirstCorner())
- Runwides will happen at increased rates during flying laps in qualifying (RunningWideDirector -> CanRunWide())
- Implemented system that controls field spread by performance - if the performance gap becomes too great for a part, it will be automatically closed back up at season end. All new values maintain the percentage progress within the new performance range so that teams do not gain or lose relative to each other (Team -> OnDayEnd(), Team -> UpdatePerformanceSpreadValues(), CarManager -> PerformanceCatchup()) - This is an experimental feature, expect it to break...
- Collisions are now disabled in qualifying so cars do not get stuck on each other (Vehicle -> CreateCollisionBounds())
- Lapping cars are no longer slowed as much when doing so in a corner (TrackLayoutSpeedController -> GetCorningSpeed())
- Cars passing traffic in corners during their flying laps now take a small reduction in cornering speed while doing so (TrackLayoutSpeedController -> GetCorningSpeed())
- Overtake rolls are immediately rejected if either the attacker or defender is in a sector that currently has a yellow flag (OvertakeDirector -> CalculateOvertakeAttempt())
[Bug Fixes]
- Corrected distance calculations for overtake roll proximity bonus (OvertakeDirector -> CalculateOvertakeAttempt())
- Corrected code where the AI would fuel for the laps remaining when they should not (SessionStrategy -> CalculateDesiredFuelLaps())
[Other]
- Changed the steering avoidance conditions for overtakes to force cars to only move offline to overtake if they have rolled a pass (AvoidanceSteeringBehaviour -> ShouldWriteAvoidanceToMap())
- Added a specific condition for steering avoidance when a car is yielding (AvoidanceSteeringBehaviour -> ShouldWriteAvoidanceToMap())
- Changed the steering avoidance for speed difference to only be active on straights and require a lower speed difference (AvoidanceSteeringBehaviour -> ShouldWriteAvoidanceToMap())
- Reduced medium speed corner speed range (SessionPerformance -> GetSpeedForCorner())
- Tier specific time costs are now subject to the time cost multiplier for the current track (SessionPerformance -> CalculateCarStats())
- Rebalanced WMC stats so they fit into the intended 0 - 200 range at game start (Assets - DefaultParts)
- Increased time costs across the car now that performance spread is more controlled (SessionPerformance -> CalculateCarStats())
- Removed some redundant code (CarPartDesign -> SetSeasonStartingStats())
Version n15
[AI Logic]
- Added circuit overtake difficulty into the chances for AI teams to choose "Aggressive First Stint" as their starting stint choice (SessionStrategy -> SetDesiredPitLap())
[Gameplay]
- If a car is very close to the one ahead and has not rolled an overtake, they will have their brake power reduced (if it is better than the car they are following) and cornering speed set to that of the car ahead (if it is greater) (TrackLayoutSpeedController -> GetCorningSpeed())
- Removed the defender bias from driving styles in overtake rolls (OvertakeDirector -> GetPointsForDrivingStyle())
- Overtake difficulty is now a percentage chance for each overtake roll to immediately fail (OvertakeDirector -> CalculateOvertakeAttempt())
- The total overtake attempt score of the attacker is now multiplied based on proximity to the defending car (OvertakeDirector -> CalculateOvertakeAttempt())
- Reduced maximum overtake duration (AIOvertakingBehaviour -> SimulationUpdate())
- Increased critical part time cost multipliers for the engine and gearbox, added a multiplier for them when they are 'Useful', and increased the multiplier for them when they are non-critical (CriticalCarPartPerformance -> PrepareForSession())
- Slightly increased time costs for all areas of the car except brakes (SessionPerformance -> CalculateCarStats())
- Increased car-to-car collision cooldown on lap 1 to prevent excessive collisions (Vehicle -> UpdateCollisionWithVehicles())
[Bug Fixes]
- Initial code to fix the "power moves" where cars will sometimes fly around corners and overtake multiple cars despite not even rolling an overtake (AvoidanceSpeedController -> CalculateDesiredSpeed())
[Other]
- Changed the way adjusted aggression is calculated (Team -> GetAdjustedAggression())
- Took off one buffer lap by default if tyres are the limiting factor for a player car's stint when using AI control (SessionStrategy -> SetDesiredPitLap())
- Returned overtake rolls to their original locations (AIRacingBehaviour -> OnEnterGate(), OnEnterCorner(), OnEnterStraight())
Version n14-v2
[Bug Fixes]
- Corrected issue where the AI would ignore the laps until the weather change and instead run the stint to the lap count if the tyre they currently had fitted was able to do so
Version n14
[AI Logic]
- Expanded the possible refuelling levels when 80% tanks are active (SessionStrategy -> CalculateDesiredFuelLaps())
- Added extra outlap overhead in qualifying to account for the incorrect tyre for the weather on the outlap, or a busy track(GaragePathState -> SetWaitDuration())
- Increased minimum aggression requirement to use Attack when using up tyre overhead (DrivingStyle -> SingleSeaterAIDrivingStyle())
[Gameplay]
- Reduced the benefit of weight stripping to 1 performance per 1% reliability (CarPartStats -> performanceGainedPerReliabilityPointWeightStripped)
- Reduced slipstream bonus at Phoenix A (DrivingStyle -> SetSlipstreamBonus())
- Removed slowdown for 'corners' at Phoenix A (SessionPerformance -> GetSpeedForCorner(), TrackLayoutSpeedController -> GetCorningSpeed())
- Reduced possible SC duration to a maximum of 5 laps (AISafetyCarBehaviour -> OnEnter())
- Reduced the difference between the minimum and maximum completion times of various pit tasks (Assets -> SingleSeaterDesignData)
- Player vehicles no longer set their pit lap to a weather change lap when under AI control, only fuel, tyres, or lap count (SessionStrategy -> SetDesiredPitLap())
- Tyre life readouts are now tied to Telemetry Centre level, you will get more precise information as you upgrade it (TyreSet -> GetConditionText())
[Bug Fixes]
- Cars that retire while under SC will no longer break the whole thing (AIRetiredBehaviour -> OnEnter())
[Other]
- Minor refactoring to the logic that handles double stacking avoidance (SessionStrategy -> UpdateDesiredPitLap())
- General refactoring to the logic that handles setting pit laps to reduce repetition and improve both game and AI performance (SessionStrategy -> SetDesiredPitLap())
- Weight stripping values will now be reloaded on game load, to allow changing the value mid-career (Championship -> OnLoad())
- Created a new method for adjusted aggression so it can be used more easily elsewhere (Team -> GetAdjustedAggression())
- Added GetAdjustedAggression() calls to three methods (SessionStrategy -> GetTyresForRaceStart(), DrivingStyle -> SingleSeaterAIDrivingStyle(), SessionStrategy -> SetDesiredPitLap())
- Halved the time gain per point of performance for engines and gearboxes (SessionPerformance -> CalculateCarStats())
Version 1.52n13
[AI Logic]
- Removed the ability for the AI to choose the "Soft Final Stint" strategy if 40% tanks are in use (SessionStrategy -> SetDesiredPitLap())
- The AI will now have a chance to fuel for half of the remaining distance if double the fuel tank can reach beyond the end, resulting in 2 shorter stints (SessionStrategy -> CalculateDesiredFuelLaps())
- The AI now have the ability to use the "Aggressive First Stint" strategy when 40% tanks are in use (SessionStrategy -> SetDesiredPitLap())
- The AI now have the ability to use the "Stretch Fuel" strategy when 40% tanks are in use, and double the fuel tank plus 20% can reach the end (needs wider testing to ensure proper functionality) (SessionStrategy -> SetDesiredPitLap())
- Fully refactored AI driving styles (DrivingStyle -> SingleSeaterAIDrivingStyle())
- Further reworked AI tyre selection at race start (actually using my brain this time) so they should be more likely to pick the softer tyre the further up they start (SessionStrategy -> GetTyresForRaceStart())
[Gameplay]
- Brakes are now considered when making overtake rolls - being alongside a car when making the roll will negate the penalty for having worse brakes than the defending car (OvertakeDirector -> CalculateOvertakeAttempt())
- Reduced car-to-car collision chance on lap 1 (Vehicle -> UpdateCollisionWithVehicles())
- The 60XP limit for ERS has now been removed as overskilled drivers will look for other drives before the end of their contract (Person -> GetInterestedToTalkReaction())
- Adaptability is no longer skewed to the defender when making overtake rolls in the wet (OvertakeDirector -> CalculateOvertakeAttempt())
[Bug Fixes]
- Corrected a messed up calculation when scaling aggression to chairman happiness and position (DrivingStyle -> SingleSeaterAIDrivingStyle())
- Tyre condition is now set to a low value on the puncture collision event to prevent the AI picking that tyre again later (TyreSet -> AddPunctureOnCollision())
- Corrected code that was causing the AI to use a softer tyre even when the fuel and the middle tyre could reach the end when using the 40% tanks rule (SessionStrategy -> TyresForSmallTanks())
[Other]
- Removed various output log calls
- Added a force reload of the suppliers when pre-season is starting to trigger an update on the available suppliers (let me know if this still isn't working properly) (Championship -> OnPreseasonStart())
Version 1.52n12
Rebirth Redux 1.52n12 Changelog:
[AI Logic]
- The AI will try to stretch a tyre if their stint will be decided by tyre life, but stretching an additional percentage will get them to half distance (SessionStrategy -> SetDesiredPitLap())
- The AI no longer take off 'buffer laps' for their tyre selection at pit stops, this is handled by the desired lap system (SessionStrategy -> TyresForNoRefuelling(), TyresForSmallTanks(), TyresForLargeTanks())
- The AI now use a different method to calculate their laps remaining when deciding to make a stop close to the end of the race (SessionStrategy -> DoesVehicleNeedToPit())
- Reworked AI driving style logic (DrivingStyle -> SingleSeaterAIDrivingStyle())
- The AI can now designate their first stint in a race as an aggressive stint to allow more attacking actions (SessionStrategy -> SetDesiredPitLap())
- Adjusted AI tyre selection at race start, cars starting high are more likely to select the softest tyre to start (SessionStrategy -> GetTyresForRaceStart())
[Gameplay]
- Slightly increased the chance for a car to crash (CrashDirector -> VehicleWillCrash())
- Slightly decreased the chance for a car to suffer mechanical issues (CarPartCondition -> GetNextConditionLoss())
- Decreased the chance for a lockup (TyreLockUpDirector -> IsTyreLockUpViable())
- Decreased the speed of cars on an in-lap during qualifying (InOutLapSpeedController -> CalculateDesiredSpeed())
- Decreased the cornering speed of cars on an in-lap during qualifying(TrackLayoutSpeedController -> GetCorningSpeed)
- Cars no longer have their cornering speed influenced by the car behind if they are simply within the overtaking zone (TrackLayoutSpeedController -> GetCorningSpeed())
- The minimum range to the car ahead in qualifying prior to starting a flying lap is vastly reduced in the last minute of the session (DrivingStyle -> YieldForVehicle())
- Tyres cool faster when over 50% temperature while on a straight and using Back Up or Conserve (TyreSet -> ExpectedTyreDrivingStyleTemperatureChange())
- Tyres warm slower while on a straight and using Attack or Push (TyreSet -> ExpectedTyreDrivingStyleTemperatureChange())
- Part deg steps now range from 8 to 16 in a race session (CarConditionPerformance -> PrepareForSession())
- Cornering speeds for cars with broken front wings, rear wings, or suspension have been reduced (TrackLayoutSpeedController -> GetCorningSpeed())
- Reduced the direct time cost for broken suspension and rear wings as they now suffer cornering speed penalties (Assets -> SingleSeaterDesignData)
- Removed some redundant or nonsensical elements in the overtake rolls (OvertakeDirector -> CalculateOvertakeAttempt())
- Created new condition requirements for overtake rolls (OvertakeDirector -> CalculateOvertakeAttempt())
- Added an overtaking difficulty attribute to every circuit that influences the outcomes all overtake rolls (Circuit -> SetOvertakingDifficulty())
- Pit lane speeds with the low speed rule are now adjusted based on time cost to lap time to allow more strategies (Circuit -> SetPitLaneSpeedAdjuster())
- Reduced speed penalty for cars who are currently running wide (PathTypeSpeedController -> CalculateDesiredSpeed())
[Bug Fixes]
- Cars with punctures are now less likely to obstruct other cars (TyrePerformance -> SimulationUpdate())
- Re-normalised time cost for incorrect tread type across all tyres (Assets -> SingleSeaterDesignData)
[Other]
- The time costs for car performance, driver stats, current fuel, and tyre performance are now being collected and used in a new method for driving style considerations (SessionStrategy -> EstimatedLapTimeForDriverAndCar())
- Time now stops fast forwarding when part reliability or performance improvements are complete, although it is temperamental at times (PartImprovement -> SetEndDate())
- Created new method that will set a part to 0% reliability if retirement level damage is rolled in an accident (Car -> OnCollisionRetirement())
- Refactored some of the code when car-to-car collisions happen and damage is applied. Damage to endurance cars is no longer checked when in single seaters, for example (RaceDirector -> ProcessCollisionDamage())
- Refactored some vanilla code to include additional behaviour types when checking if a car is able to participate in a car-to-car collision (RaceDirector -> VehicleInCorrectStateForCollisionDamage())
- Added crash roll for each car while processing collision damage to have cars retire on track from collision damage if applicable (RaceDirector -> ProcessCollisionDamage())
- Cars are no longer declared as retired as a result of crash damage, they are instead pushed through the standard crash logic and will crash if they are put into a crash lane before getting to the pits (RaceDirector -> ProcessCollisionDamage())
- Added getter to allow access to the queued status so that a car can crash even if they plan a pitstop before it happens (the crash would be negated normally) (SessionStrategy - queuedStatus, PathController -> EnterCrashLane())
- The crashing status is now wiped at pit exit if it is queued, as the crash status is caused by crash damage that is now fixed (SessionStrategy -> OnExitPitlane())
Current Rebirth: Redux feature list as of 1.52n12, including carried over Rebirth: Phoenix Edition features (explicitly noted, credit TheFlamingRed)
This list is not exhaustive because I am very old (over 30) and probably forgot things.
This mod is a work in progress which I do in my spare time, therefore there may be slightly long periods between updates. I try to maintain one update per month, but burn out, lack of enthusiasm, or size of the current update may block this.
Updates will be posted here 1 week after they have been posted on the Discord, which allows me to find any remaining critical issues and give those who are following the project closely some kind of benefit. This will end once the current 'nightly' updates are finished and we return to the normal schedule.
If you wish to actively follow development (I constantly spam what I am doing), you can join the Discord - https://discord.gg/yfqyTGjxjf
CRITICAL NOTE: IF YOU ARE GOING FROM N18 TO N19, YOU WILL NEED TO START A NEW SAVE. ALL CHANGES FOR N19 ARE IN THE CHANGELOGS PACKAGED WITH THE MOD.
== Playable Series == ERS APS WMC IEC-A IEC-B
It is critical you follow the above. I have stripped back AI logic for everything else so GT will function either not at all or very strangely. Single Seaters must be played on LONG PREFERENCES, you can swap between the three race lengths using the options for Endurance. Change it before you launch the weekend.
== Mod Installation == Once you have downloaded the files, you need to place them in the following locations. This will overwrite the vanilla versions.
Assembly-CSharp.dll & Assembly-CSharp-firstpass need to be pasted into ...\steamapps\common\Motorsport Manager\MM_Data\Managed resources.assets needs to be pasted into ...\steamapps\common\Motorsport Manager\MM_Data
Make sure you have the Rebirth Logo Pack from the Workshop, otherwise you will have white boxes in place of the logos of the new teams
This mod is NOT COMPATIBLE with other mods, ensure all other Workshop mods are deactivated before starting a new game.
This mod is also NOT COMPATIBLE with the save editor, it will absolutely mess up some of the properties I have added and break your save.
== AI == - Tyre selection at pit stops has been entirely re-written - Fuelling levels have been entirely reworked - Driving Style choice has been entirely re-written - Engine Mode selection has been entirely re-written - Changeable weather behaviour has been entirely re-written (multiple times at this point) - Created the Desired Lap system to allow the creation of more competent pit strategy logic and double stacking avoidance, also allowing reaction to stints lasting longer or lock ups ruining tyres - Created new logic for AI reactions to the Safety Car and Virtual Safety Car - Entirely re-wrote AI lookahead logic for deciding when to leave the pits in qualifying. They will look for a slick lap, inters lap, then wets lap - The AI will select the tyre for their intended flying lap, not the one that is correct for right now - AI cars will try to defend against active attackers if they have the tyre temperature, tyre life, or fuel delta to do so - AI teams have the ability to cut a stint short if they are stuck behind slower cars
== Car Degradation == - Cars no longer lose reliability on parts during a race, except for the engine which reduces at 50% of the vanilla rate - Instant Failure system implemented so that a part has a flat chance to fail at every condition loss check based on the current reliability, which ends the bizarre need to repair cars endlessly in race 1 of every season - Chance to retire immediately from an instant failure is vastly increased - Every discipline has a bespoke instant retirment chance, Endurance has the lowest to allow repairs more often - Repair times are now bespoke to the discipline, Endurance has the longest - The amount of condition loss checks in a race are randomised (Rebirth)
== Car Performance == - Performance of a car on track is no longer simply scalar based - Performance is now directly translated into a time cost on a linear scale for every part except brakes, which remain scalar based - Critical parts are no longer a fixed time penalty based on rank, and are instead direct multipliers on the time cost - All series base their time cost on a 0 - 1,300 point scale - All series now start at 0 for their car performance ranges, but each has their own reset point - The invisible wall that caused excessive field spread and extremely random results has been removed, and a new system that allows for battles across the race distance implemented - Part reset performance spread is now 200, and your new starting stats are loosely based on your car at the time of the reset, with some further randomisation - Added slipstream, the effect is greater the closer the car is to the one ahead, but the effect is reduced linearly with track wetness. This is active in Race and Qualifying sessions
== Championship Rules == - Created new rule that sets Endurance to have fuel tanks that last for roughly one hour - Created new rule that gives Endurance 30 sets of dry weather tyres to allow for the 24-hour races. Endurance also gets more wet weather tyres. - Created custom, relatively restricted, rulesets for singleseaters to create a more tailored experience. No longer can you mould the ruleset to your advantage.
== Circuits == - All circuits now have a time cost multiplier that tailors the spread per lap to the circuit currently being raced on - All circuits have session start times which make use of the day/night cycle, rather than always being at 1pm - All circuits now have an overtaking difficulty attribute that influences the outcomes of all overtake rolls
== Crashes == - Crashes are no longer tethered to the old points system - Crash chance is now calculated from driver stats, current tyre tread compared to recommended, tyre condition, track conditions, and driver activity
== Drivers == - Drivers will look for other driving opportunities if they are too skilled and experienced for ERS, regardless of morale - Driver marketability is modified based on race results (Rebirth) - Driver experience is no longer an unused stat, and directly modifies driver pace (Rebirth) - Driver experience is gained by participating in any session, or having a Simulator present in your HQ. Some traits and driver age also boost experience gain. - Driver experience influences the chances for a successful overtake roll, lock up, crash, and car-to-car collision - Driver experience decays when they are unemployed - Driver peak age and duration adjusted to stop all regens from retiring in their early-30's, still undergoing monitoring to get values correct - Driver Aids no longer reduce the pace deficit of poor quality drivers (it will instead be used for other calculations) - Regen drivers have a severly lowered starting marketability - Regen drivers start with very low experience - Drivers with greater than 60 experience can no longer be hired in ERS - Driver morale losses from car quality are now scaled to their rating and current series
== HQ == - Build times for all HQ buildings increased by 70%
== HUD == - Tyre life remaining is now displayed in laps, rather than percentage - Tyre life text colour is dependent on how much life that tyre has remaining, starting green and eventually going red (alternating red/black on the driver pop up display) - Fuel delta when refuelling is off has different text colour depending on the current delta - high positive delta is green, low negative delta is red - The player can no longer see the tyre condition of an opponent's tyres in the driver pop up display - The player can no longer see the tyre condition of an opponent's tyres in the standings tower - The player can no longer see the current engine mode of an opponent's car - The driver with the fastest lap in the race is now highlighted purple in the standings tower
== Lock ups == - These can now happen in more locations at every circuit with this one easy trick - Lock up chance has been entirely decoupled from the old points system, and is now calculated from driver stats, track conditions, tyre condition, and driver activity - Driver Aids halve the chance for a lock up to occur
== Others == - Full day/night cycle implemented, which works in every session - Retired or pitting cars turn their lights off (if they have any) - Removed the text that tells the player exactly how many laps the SC will be out for. They will only be notified when it has 1 lap remaining - Removed the text that tells the player exactly how long the VSC will last for. They will only be notified when there is less than 10 seconds remaining - Overall marketability is now capped based on the current tier for the team - ERS/GTC are 2 stars, APS/IEC-B are 3 stars, IGTC/IEC-A are 4 stars, WMC is 5 stars - Tyre temperature has been reworked - setting a driver to Neutral will have their tyre temp return to 50% where it will remain until any other mode is used - Tyres cool faster when over 50% temperature while on a straight and using Back Up or Conserve - Tyres warm slower while on a straight and using Attack or Push - Cars only emit smoke on retirement if the engine is the reason for retirement - Cars emit thinner black smoke if they have a repairable engine problem - Pit crew contract lengths are now set to double the number of races in a season, plus 1 - Time costs for everything have been rebalanced (a million times by now) - Tyre life has been rebalanced (also a million times) - The chance for a risky part to be found has been reduced to 5% per risk level
== Parts & Part Components == - Entirely rebalanced and recreated - Most designer components now act as augments to your built part, allowing you to still maximise performance while being able to utilise designer component bonuses - Part components only have their days to build cost applied the first time you use them that season - a Great part will only add 3 days the first time, every other time will have 0 days cost - Cost per component entirely rebalanced, components are more expensive in line with their quality and current championship - it is more expensive in WMC than ERS to build parts - Car parts have had their base build price rebalanced based on championship and type - brakes are cheaper to develop than engines, ERS is cheaper to compete in than WMC - Adjusted base part development times - ERS produces parts faster than WMC - Maximum reliability of a part is now calculated differently - a base of 45% plus bonuses from the Design Centre and Designer stat for that part - Part ranking is now saved prior to pre-season so that part resets give you new parts that reflect your place in the field and allow the whole 200 point reset range to be used - When parts are reset, they also go through some small randomisation so some teams may move up while others may drop
== Personality Traits == - Entirely rebalanced, traits are more impactful - Redundant traits from Rebirth removed - Added four new special cases for traits, and a set of traits that utilise them
== Practice Sessions == - The starting setup knowledge for a driver is now based on their experience, with a bonus for drivers who have been with their current mechanic for over 52 weeks
== Qualifying Sessions == - Cars not on flying laps will now yield for those who are (this still requires some work, but works at a basic level) - Cars will try to split up before starting their flying laps (this still requires some work, but works at a basic level) - Cars on an inlap are now classed as finished when the session ends
== Race Sessions == - Added a new time penalty level - 5 second penalty - Reworked all potential reasons for a penalty to have either drive-throughs or time penalties added at any point in the race - Drivers are more likely to get time penalties than drive-throughs - Pit mistakes have a small chance to be a big or huge mistake, which increases the mistake time even more when they happen - Race starts no longer boost car performance for the whole first sector, which also prevents unbeatable laps being set on lap 1 by the slowest car in the field - Car-to-car collision crash damage and blame apportionment have been adjusted. The car behind is more likely to get blamed, damage is related to which car is ahead or behind, both can get punctures or instantly retire - Safety Cars have a slightly adaptive maximum length based on lap count - Cars no longer use the rain lights for low engine mode - Added the ability to have the AI control your driver's Driving Style and Engine Mode at will, allowing you to just do pit strategy (only specific resolutions right now) - Safety Car chance is reduced as a race goes on, resulting in more yellow flags later in races - Overtaking rolls have had their conditions adjusted - nonsense items have been thrown out, more relevant items added
== Rebirth: Phoenix Edition Bug Fixes == - AI teams will now only select livery templates that are for their model of car - Corrected spelling of *Lagro Banco* - Corrected spelling of *Mansfoort* - Removed the Rebirth added backstory as it could crash the game at the first interview - The player should no longer be left with no supplier choices at very low player stats
== Sponsors == - Rebalanced sponsors to reduce the severity of the income curve - 5-star sponsors are no longer required for financial stability, and loss of them will no longer cause catastrophic losses - Added more race placement sponsors for the star ratings that lacked them
== Teams == - 12 teams in all single seater and GT series (Rebirth) - Around 50 new teams added (Rebirth) - Teams can be rebranded at the end of the season (Rebirth) - Merged in Rebirth 1.54 code that now allows all added teams to have proper loading screens - Created colour palettes for all Rebirth added teams
== Vanilla Bug Fixes == - Corrected *Struggles Under Pressure* triggering in the opposite conditions - Inverted handling feedback radio messages should now be the right way around - Fixed various typos - Fixed bug that caused a driver to look at the wrong car when comparing performance, which left them moaning they had a worse car than themselves - Fixed bug that caused a main driver to use the wrong slot in practice, sometimes resulting in duplicates of themselves taking part in the session - All drivers no longer become eligible for singe seaters when loading a save (MrRandom) - AI teams should no longer have their cars yo-yo'ing when requesting one passes the other, and the car to be passed is faster. They will only swap if the car being asked to allow the other through is slower - Fixed bug that could cause cars to not return to the pits at the end of their practice or qualifying runs - Fixed bug that was causing the VSC timer to not be reset between races