Open Rails Short Horn Blast Fix – Another Solution For “Unfixable” Horns

An early problem in Open Rails, and one which hung around for a bit, was an inability to play a short horn blast — something necessary for common horn signals, including the usual North American long-long-short-long pattern for grade crossings. The basic horn behavior was resolved fairly quickly, but there were still a significant number of horns & whistles that didn’t play correctly, instead playing out a full-length blast regardless. The issue was figured out in the community and resolved by editing or adding in cue points (where they were non-existant) in the sound effect .WAV files. That has been the standard fix for a large variety of horns that don’t play correctly in Open Rails. Unfortunately, there have still been a few “unfixable” ones that didn’t improve with editing the cue points in a sound editor.

The solution turns out to be a parameter in the .SMS file that determines how the horn sound is triggered and stopped.

.SMS files have to be one of the more poorly understood and documented configuration files in MSTS. While the format is largely self-explanatory, there is nothing provided in the original MSTS TechDocs to clarify the finer points of .SMS files. There is, however a good tutorial on them by Ralf Hagen on the Steam4Me site here. The problem happens when the incorrect variation of the loop release method is called.

Here’s an example of a horn that will only play a full bast, no matter how quickly the spacebar is pressed and released in Open Rails. This snippet is from the horn discrete trigger section of an .SMS file with the problem; the specific issue is highlighted in red:

Discrete_Trigger ( 8 StartLoopRelease ( 1 File ( "horn.wav" -1 ) SelectionMethod ( SequentialSelection ) ) )
Discrete_Trigger ( 9 ReleaseLoopRelease () )

The problem is with the use of “ReleaseLoopRelease ()” in the discrete trigger sequence. Although it has no different effect in MSTS, it will cause the strict interpretation of Open Rails to process the horn keypress and release as “Play the named horn sound all the way through and release on the ending cue point.” It won’t stop and complete the sound early, as with a short horn blast/short keypress.

Here is the fixed discrete trigger section which will play correctly in Open Rails:

Discrete_Trigger ( 8 StartLoopRelease ( 1 File ( "K3LA.wav" -1 ) SelectionMethod ( SequentialSelection ) ) )
Discrete_Trigger ( 9 ReleaseLoopReleaseWithJump () )

The fix is to use “ReleaseLoopReleaseWithJump ()” instead. Open Rails positively interprets this as “Play the named horn sound until the the activation key is released, then jump to the end cuepoint right away.” Most horns in MSTS use this line anyway. Only a relative few use “ReleaseLoopRelease ()” instead, and in MSTS it doesn’t seem to make any difference. However, in Open Rails, the two statements are definitely treated differently.

Notably, many Streamlines locomotives used this in the past, so editing this line in Streamlines’ .SMS files will fix the horns in Open Rails if they fail to play short blasts.

Different locomotives use varying ways to call the .SMS file to use. Look in the .ENG file; near the bottom of the file just before the comments section should be a decalaration that reads ‘ Sound ( “soundfilename.sms” ) ‘ or a path to the .SMS file and location. (Aliased locomotives and sounds may be in a location outside the locomotive’s folder.) Find the named .SMS file and make the edit if you find it’s using the incorrect “ReleaseLoopRelease ()” trigger.