@@ -405,6 +405,8 @@ public float OdometerM
405405 public float DynamicBrakeDelayS ;
406406 public bool DynamicBrakeAutoBailOff ;
407407 public bool DynamicBrakePartialBailOff ;
408+ public bool DynamicBrakeEngineBrakeReplacement ;
409+ public float DynamicBrakeEngineBrakeReplacementSpeed ;
408410 public bool UsingRearCab ;
409411 public bool BrakeOverchargeSoundOn = false ;
410412 protected bool DynamicBrakeBlendingEnabled ; // dynamic brake blending is configured
@@ -600,15 +602,6 @@ public override void LoadFromWagFile(string wagFilePath)
600602
601603 protected void CheckCoherence ( )
602604 {
603- if ( ! TrainBrakeController . IsValid ( ) )
604- TrainBrakeController = new ScriptedBrakeController ( this ) ; //create a blank one
605-
606- if ( ! EngineBrakeController . IsValid ( ) )
607- EngineBrakeController = null ;
608-
609- if ( ! BrakemanBrakeController . IsValid ( ) )
610- BrakemanBrakeController = null ;
611-
612605 if ( ThrottleController == null )
613606 {
614607 //If no controller so far, we create a default one
@@ -1083,6 +1076,8 @@ public override void Parse(string lowercasetoken, STFReader stf)
10831076 case "engine(dynamicbrakehasautobailoff" :
10841077 case "engine(ortsdynamicbrakeshasautobailoff" : DynamicBrakeAutoBailOff = stf . ReadBoolBlock ( true ) ; break ;
10851078 case "engine(ortsdynamicbrakeshaspartialbailoff" : DynamicBrakePartialBailOff = stf . ReadBoolBlock ( false ) ; break ;
1079+ case "engine(ortsdynamicbrakereplacementwithenginebrake" : DynamicBrakeEngineBrakeReplacement = stf . ReadBoolBlock ( false ) ; break ;
1080+ case "engine(ortsdynamicbrakereplacementwithenginebrakeatspeed" : DynamicBrakeEngineBrakeReplacementSpeed = stf . ReadFloatBlock ( STFReader . UNITS . SpeedDefaultMPH , null ) ; break ;
10861081 case "engine(dynamicbrakesdelaytimebeforeengaging" : DynamicBrakeDelayS = stf . ReadFloatBlock ( STFReader . UNITS . Time , null ) ; break ;
10871082 case "engine(dynamicbrakesresistorcurrentlimit" : DynamicBrakeMaxCurrentA = stf . ReadFloatBlock ( STFReader . UNITS . Current , null ) ; break ;
10881083 case "engine(numwheels" : MSTSLocoNumDrvWheels = stf . ReadFloatBlock ( STFReader . UNITS . None , 4.0f ) ; if ( MSTSLocoNumDrvWheels < 1 ) STFException . TraceWarning ( stf , "Engine:NumWheels is less than 1, parts of the simulation may not function correctly" ) ; break ;
@@ -1235,6 +1230,8 @@ public override void Copy(MSTSWagon copy)
12351230 DynamicBrakeForceCurves = locoCopy . DynamicBrakeForceCurves ;
12361231 DynamicBrakeAutoBailOff = locoCopy . DynamicBrakeAutoBailOff ;
12371232 DynamicBrakePartialBailOff = locoCopy . DynamicBrakePartialBailOff ;
1233+ DynamicBrakeEngineBrakeReplacement = locoCopy . DynamicBrakeEngineBrakeReplacement ;
1234+ DynamicBrakeEngineBrakeReplacementSpeed = locoCopy . DynamicBrakeEngineBrakeReplacementSpeed ;
12381235 DynamicBrakeMaxCurrentA = locoCopy . DynamicBrakeMaxCurrentA ;
12391236 DynamicBrakeSpeed1MpS = locoCopy . DynamicBrakeSpeed1MpS ;
12401237 DynamicBrakeSpeed2MpS = locoCopy . DynamicBrakeSpeed2MpS ;
@@ -1539,8 +1536,29 @@ public override void CopyControllerSettings(TrainCar other)
15391536 public override void Initialize ( )
15401537 {
15411538 TrainBrakeController . Initialize ( ) ;
1542- EngineBrakeController . Initialize ( ) ;
1543- BrakemanBrakeController . Initialize ( ) ;
1539+ if ( ! TrainBrakeController . IsValid ( ) )
1540+ {
1541+ TrainBrakeController = new ScriptedBrakeController ( this ) ; //create a blank one
1542+ TrainBrakeController . Initialize ( ) ;
1543+ }
1544+ if ( EngineBrakeController != null )
1545+ {
1546+ EngineBrakeController . Initialize ( ) ;
1547+ if ( ! EngineBrakeController . IsValid ( ) && ! SteamEngineBrakeFitted )
1548+ {
1549+ EngineBrakeController = null ;
1550+ EngineBrakeFitted = false ;
1551+ }
1552+ }
1553+ if ( BrakemanBrakeController != null )
1554+ {
1555+ BrakemanBrakeController . Initialize ( ) ;
1556+ if ( ! BrakemanBrakeController . IsValid ( ) )
1557+ {
1558+ BrakemanBrakeController = null ;
1559+ BrakemanBrakeFitted = false ;
1560+ }
1561+ }
15441562 LocomotivePowerSupply ? . Initialize ( ) ;
15451563 TrainControlSystem . Initialize ( ) ;
15461564 CruiseControl ? . Initialize ( ) ;
@@ -1828,6 +1846,11 @@ public override void Initialize()
18281846 }
18291847 }
18301848
1849+ if ( DynamicBrakeEngineBrakeReplacement && DynamicBrakeEngineBrakeReplacementSpeed == 0 )
1850+ {
1851+ DynamicBrakeEngineBrakeReplacementSpeed = DynamicBrakeSpeed2MpS ;
1852+ }
1853+
18311854 // Initialise track sanding parameters
18321855 if ( MaxTrackSandBoxCapacityM3 == 0 )
18331856 {
0 commit comments