@@ -4076,6 +4076,8 @@ public void UnconditionalInitializeBrakes()
40764076 if (Simulator.Confirmer != null && IsActualPlayerTrain) // As Confirmer may not be created until after a restore.
40774077 Simulator.Confirmer.Confirm(CabControl.InitializeBrakes, CabSetting.Off);
40784078
4079+ SetInitialBrakeModes();
4080+
40794081 float maxPressurePSI = 90;
40804082 float fullServPressurePSI = 64;
40814083 if (FirstCar != null && FirstCar.BrakeSystem is VacuumSinglePipe)
@@ -4561,6 +4563,38 @@ public void CheckFreight()
45614563 if (TrainType == TRAINTYPE.AI_INCORPORATED && IncorporatingTrainNo > -1) IsPlayable = true;
45624564 } // CheckFreight
45634565
4566+
4567+ public void SetInitialBrakeModes()
4568+ {
4569+ var lead = LeadLocomotive ?? Cars?.FirstOrDefault();
4570+ if (lead == null) return;
4571+
4572+ // Check if lead is vacuum-braked
4573+ if (lead.BrakeSystem is VacuumSinglePipe || (lead.BrakeSystems?.Any(b => b.Value is VacuumSinglePipe) ?? false) &&
4574+ Cars.Count(c => c.BrakeSystem is VacuumSinglePipe || c.BrakeSystem is ManualBraking ||
4575+ (c.BrakeSystems?.Any(b => b.Value is VacuumSinglePipe || b.Value is ManualBraking) ?? false)) > Cars.Count / 3)
4576+ {
4577+ foreach (var car in Cars.Cast<MSTSWagon>())
4578+ {
4579+ if (car.BrakeSystems?.ContainsKey((BrakeModes.VP, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.VP, car.MassKG);
4580+ else if (car.BrakeSystems?.ContainsKey((BrakeModes.VB, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.VB, car.MassKG);
4581+ else if (car.BrakeSystems?.ContainsKey((BrakeModes.VU, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.VU, car.MassKG);
4582+ }
4583+ }
4584+ else
4585+ {
4586+ foreach (var car in Cars.Cast<MSTSWagon>())
4587+ {
4588+ if (car.BrakeSystems?.ContainsKey((BrakeModes.R_MG, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.R_MG, car.MassKG);
4589+ else if (car.BrakeSystems?.ContainsKey((BrakeModes.R, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.R, car.MassKG);
4590+ else if (car.BrakeSystems?.ContainsKey((BrakeModes.P, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.P, car.MassKG);
4591+ else if (car.BrakeSystems?.ContainsKey((BrakeModes.AP, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.AP, car.MassKG);
4592+ else if (car.BrakeSystems?.ContainsKey((BrakeModes.G, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.G, car.MassKG);
4593+ else if (car.BrakeSystems?.ContainsKey((BrakeModes.AG, 0)) ?? false) car.SetBrakeSystemMode(BrakeModes.AG, car.MassKG);
4594+ }
4595+ }
4596+ }
4597+
45644598 public void CalculatePositionOfCars()
45654599 {
45664600 CalculatePositionOfCars(0, 0);
0 commit comments