I thought that I'd post here a preview of some features on which I have been working for Simutrans-Experimental. The source code for them is currently available on Git (link in the original post), but I have not yet compiled a binary as these new features need a compatible pakset for testing purposes, so users would not notice a great deal of difference.
I am currently working on a version of PakBritain, called PakBritain-Experimental, to go with Simutrans-Experimental, which will be available when I have set up enough parameters for it to be in a worthwhile state for testing. For the time being, I still encourage testing of the existing binary linked on the original page.
Reversing
The first new feature is a more sophisticated system of reversing. It is useful mostly for railway vehicles. In essence, it simulates both graphically and in simulation terms the fact that, for many trains, the locomotive needs to run around to the other end of the train, but the whole train does not turn around in the way that, for example, a road vehicle does: it just goes the other way. Likewise, some trains do not have locomotives running around at all, but can drive from both ends.
The attached screenshots show two examples. The first two are of a double headed train reaching the buffer stops and turning around: notice how the locomotives both change ends, but the carriages stay in the same order, just as in reality. The program detects that the train is double headed and acts accordingly. Similarly with steam locomotives with tenders.
The third is of an "autocoach" attached to a steam locomotive: common in rural branch-lines in the UK in the 1920s-1950s. The train can be driven either in the normal way from the locomotive at the front, or from the special cab at the rear of the train. For that reason, the locomotive does not have to uncouple and turn around at the end, and the train reverses without changing formation or direction at all. The picture shows the train travelling in reverse.
In simulation terms, whether trains have to reverse affects how long it takes them to turn around. A train, such as the autocoach example in the screen shot, that can be driven from either end can turn around very quickly. A train, as in the top example, that has a locomotive at one end and that needs to be run around to the other end before reversing turns around more slowly. A train with a steam locomotive with a tender that not only needs its locomotive to change ends, but the locomotive to turn on a turntable will turn around more slowly still.
This will make the game more fun by giving players more interesting choices, as well as by making it look more real: if players want to make their network more efficient, they will have to choose appropriate sorts of trains for the job: trains that can turn around quickly for suburban traffic, and trains with powerful locomotives for long-distance traffic (which may be more slow to turn around). As technology develops, more trains will be able to turn around more quickly. Other interesting decisions include weighing up the advantages and disadvantages of tank and tender engines (tank engines of the same power are heavier, since they cannot spread the weight into a tender, and therefore require tracks and bridges capable of higher weights, but tender engines need to use a turntable); and also the economics of long-distance multiple units: they can turn around more quickly, but, because each individual vehicle has an engine, they are less comfortable and cost more to run than locomotive hauled trains (a good middle ground is a locomotive hauled train with a driving cab at the rear - but those are not available in every era, and can be more expensive to buy).
I hope that this will add enjoyment to people's games. I should be very interested in anyone's comments.
Edit: I thought that I should add some techincal information about this feature for pakset creators.
Technical information
This feature (when used with a compatible version of Makeobj - source code available on the Simutrans-Experimental Git repository; binary not yet available, for the same reasons as above) uses two additional parameters in the .dat file:
1. can_lead_from_rear; and
2. bidirectional.
They are both boolean flags, which means that if the value is set to "0", they are considered to be false, or anything other than "0" they are considered to be true. Convention is to use "1" to denote true.
The first denotes a vehicle that, if it is at the back of a convoy, will let the convoy reverse without turning around, and go exactly backwards. This is useful for railway multiple units, or arrangements such as the autocoach pictured. In the autocoach example, only the autocoach itself need have the "can_lead_from_rear" flag set. This setting is only relevant for the rear vehicle in a convoy: it is ignored for the other vehicles. If the rear vehicle has this flag set, the fastest reverse turnaround is used.
The second denotes a vehicle that can travel in either direction without turning around. For example, an ordinary railway carriage or truck is bidirectional. A horse is not (horses cannot travel any distance walking backwards). A diesel locomotive with a cab at each end is bidrectional. A steam locomotive with a tender is not. A tank engine will usually be bidirectional, unless the tank engine is designed such as to make running in reverse impractical. (I know that tender engines do run in reverse on preserved railways, but that is far from ideal, and they cannot do that safely at anything other than the low speeds at which they operate on preserved railways). If the lead powered vehicles are bidirectional, the train will turn around more quickly than if they are not. Only bidirectional vehicles will keep their orientation when the convoy is reversing. Also, in the latest version of the code, if there is only one vehicle in the convoy, and that is bidirectional, the fastest reversing time will apply.
The whole reversing system is disapplied entirely to road and air vehicles (and kept for water-craft only because canal narrow boats might be bidirectional). The default values for both settings are false. In that state, the vehicles behave as they do in default Simutrans, with the exception of the turnaround time, which is the highest of the three, as it ****umes a convoy that needs to reverse in the slowest way.
However, the delay is set from values in simuconf.tab. In the most recent version of the code, those default to 0. Thus, without a custom pakset and custom values set in simuconf.tab, the game behaves exactly in the same way as standard Simutrans: only a specially configured pakset will enable the features. Below is an extract from the simuconf.tab file that I have been using, along with full documentation of the settings, to show what can be customised:
# These settings determine how long that it takes a train-type vehicle to turn
# around when it reaches the end of the line. They do not apply to road vehicles
# or aircraft.
#
# "unit_reverse_time" refers to trains/convoys, such as multiple units, that have
# a cab at each and, and can be driven in reverse without any re-arrangement of
# the order of the vehicles. These will generally take the least time to reverse.
#
# "hauled_reverse_time" refers to trains/convoys that cannot be driven from the
# rear, so the locomotive at the front has to run around the train and attach
# to the rear, but where that locomotive can itself be driven in either direction,
# so that it does not need to turn around.
#
# "turntable_reverse_time" refers to trains/convoys that, as for the above category,
# cannot be driven from the rear, but that also require their locomotive to be turned
# around to face the other direction (such as steam locomotives with tenders) at the
# end of the journey. These will genearlly take the most time to reverse.
#
# All times are in milliseconds (1000 = 1 sec), ****uming that the game is set to the
# normal speed.
unit_reverse_time=1500
hauled_reverse_time=2500
turntable_reverse_time=4000