This 'hold state' is very important in some situations, in particular when trains have long stops in order to allow other trains to overtake. If the 'hold state' did not exist, the signal would clear immediately as the train approached thus blocking the path of the train which is to overtake.
However, it is applied to all situations and is not very popular with some users.
Recently, I have been looking at alternative ways to define and process this state.
Rather than set it as a 'blanket' process, defined in the program code and applied to all signals at all stations, the processing could be moved to the signal itself through a definition in the signal script.
A signal would then be able to test the 'station hold' state, and set the signal at danger if that is what is required.
The advantage would be that the use of holding state can be defined per route and per location, rather than as a general overall rule.
The disadvantage would be that if it is to be set for certain signals and locations, it requires a change to the sigscr.dat file to set this behaviour.
As a side-effect, the new function would be incompatible with MSTS. To overcome this problem it would be required to define specific OR signal definitions files. That is done quite easily, though - the present sigcfg.dat file can be copied to sigcfg.dat_or, this file can than be edited to change the referenced sigsrc file.
So how would it work?
If this would be implemented, these are the steps required to set this functionality for a specific signal in a route.
- Copy the route's sigcfg.dat file to sigsfg.dat_or, and the sigscr.dat file to sigscr.dat_or (note that some routes use different sigscr files, sometimes even multiple files).
- Edit the new sigcfg.dat_or file to change the reference of the required sigscr file to the new or file.
- Identify the type of signal for which this function is required (by means of the route editor and the sigcfg.dat file).
- If the signal is to be set to state STOP if it must be held for a station stop, add the following lines to the script for that signal in the new sigscr file for OR :
if (station_hold()) { state = SIGASP_STOP; }
The function "station_hold" returns 'true' if a 'hold' is active for that signal.
The 'hold' state would now work for all signals which have this function set, not just those leading to junctions. This can have advantages in situations where there are two signals leading up to the next junction instead of one.
An experimental test with heavy AI traffic has shown that this new method actually works better than the present function.
Any thoughts on this, please?
Regards,
Rob Roeterdink