Orderless Multi Cargo SRNW – My first article!


After PZ Game 19 – some community members decided to play a Self Regulating Network (SRNW) game. However, the idea behind this game was challenging and rather different than the SRNW games we have seen on the public server. Because this game was, unfortunately, never finished it will not go to the archives. Because I think this game deserves some acknowledgment, I decided to write this small review about it and to show you guys what this game was all about as well. This is also my first article about something of the OTTD coop community; so I hope you guys will enjoy reading it and feedback is of course welcome.


How an Idea became a Game

So what makes this game so unique compared to other SRNW games? It all began on a certain late afternoon when I was looking through the PSG archive; when I found PSG 180. For the people who don’t remember this game, the game was one big SRNW, but in addition to that, the trains had no orders. The design of the network, splitters and other systems were all made to take the trains toward where we wanted them to go.  I was really impressed by this network and the trains without orders. After some thinking I was wondering if it would be possible to make a similar network which could transport more than one cargo type.

And there it was; the idea of a multi-cargo type SRNW with order-less trains. After a while I told this idea to V453000, and he was also provoked by this idea. The first question that was raised was, off course; how would we manage the different cargo trains on one network? We wanted them to use the same main line network – if we would split this as well, it will just be different networks intertwined. The main question firstly was, how would a split “know” what kind of train is passing through, and thus allowing it to enter a side line or not. We planned to transport three different cargoes; Iron ore, Steel & Goods (this was also a production chain in which primary cargoes are used to produce the latter ones). Normally with SRNW with different cargos it is possible to split the different cargo trains using unreachable orders with PFT, but in this case we wanted to have no orders at all. The first idea was to put the trains on the ML in a specific order, let’s say: Iron Ore # Steel # Goods # Iron Ore # Steel # Goods (“#” stands for; followed by), and so on. With this order of trains it was possible to “count” which train was passing through. However, a problem would emerge when one or more trains are removed (which will happen when a train takes a SL somewhere). So we wanted a countable train slot, whether it was empty or full. Thus came the idea of adding dummy trains in front of the cargo trains; which would look like: Dummy # Iron Ore # Dummy # Steel # Dummy # Goods # Dummy # Iron Ore # Dummy, etc. etc. This way the dummy represents the start of a “train slot” followed by its train or not (when the train slot is empty) and the dummy trains would always stay on the Main Line.

Figure 1: The small dummy trains (single BR-182 engines) and the cargo trains (dual BR-182 engines).

Some logic construction was needed to make sure that the right trains would follow their dummy, also instead of some general counter, here the logic would only count the dummy trains. When the right dummy train had passed, it would release a cargo train (entry) or open an exit to pull one-off the main line (exit).


Evolution of entry and exit design

The design of the entry and exits were one of the first things which had to be right. And there was quit some development between the first designs and the more final designs for the logic and how to release/pull the trains onto/off the main line. To give you guys some impression on how we dealt with the different problems – dummy train counting, timed releases, timed exit – this section will explain some of the construction designs of the entry and exit mechanisms. I will begin with the entry design and construction followed by the exit design and construction. Finally I will show some real-time designs from the game to demonstrate the compact logic construction.

One of the most crucial things in this game was the correct injection of the cargo trains in-between the dummy trains. As shown in Figure 1, you will see that the cargo trains are following their dummy trains with a 6 tile gap, the cargo train itself is 5 tiles long, followed by a 6 tile gap till the next dummy train. So we have a 6 + 5 + 6 = 17 tile gap between every dummy train; and every single cargo train (full or empty, hauling ore, steel or good) has to get on the 6th tile on full speed!

Main Line Entry construction

With this information we started construction of the entry mechanism. The first thing we needed was a precise dummy train counter. It was important that the counter only counts the single BR-182 trains (dummy trains) and not the cargo trains. In the following picture you can see how we found a way to get a single short green signal when a dummy trains passes.

Figure 2: Dummy train counters using a single NOT-Gate.

As depicted in Figure 2 it only gives a green signal when there is a dummy train on the middle detector spot. This short green signal then allowed the trains counter mechanism to skip one slot; a.k.a. it “counted” that dummy as “first” train or in our case as an “iron ore slot”.

Figure 3: Step one of the entry mechanism.

With the dummy train counter mechanism in place it was time to construct the release for the cargo trains. Because this is a so-called accelerated injection; the cargo train will get a green signal when the right dummy is counted. Using preliminary information about the distances and acceleration for the different cargo trains (empty or full, iron ore, steel or goods) we came to the following step in our concept design for the entry mechanisms.


Figure 4: Step two of the construction of the entry mechanism.

As it looks almost completed, there was still one issue. What happens when the cargo train arrives exact at the moment of a green signal? The injection design was made for trains which were waiting until release. So if the cargo train arrives exact at a green signal, it would go to fast and break the injection. To fix this we needed a train stopper – we have seen these in PZ-13 – and thus we added a similar train stopper mechanism to our injection design. At this point we had our first working and unbreakable entry mechanism for cargo trains.


Figure 5: First concept design of the entry mechanism.

Summarizing: (1) The dummy train counter, which only counts dummy trains; (2) The counter module, which was needed so the injector “knows” when to release a cargo train; (3) The NOT-Gated release; (4) Green signal delay, this was needed because of the design of how the green signal would reach the release signal, as seen in Figure 5 the green signal travels first though the main line priority and then back to the release signal (this appeared to be a drawback in the design); (5) Train stopper mechanism to stop the trains regardless a green release signal; and finally the emergency track on the left side of the picture, which was used when a train could not enter the main line for some reason.


Main Line Exit construction

Luckily the exit design was easier to construct. However, the most important thing was its speed; it needed to be fast enough not to slow down the main line train (note: it appeared that slowdowns on the main line would lead to catastrophic changes – only resetting the whole system would fix the problem). We begin by constructing the dummy train counter and counter mechanism as shown in the picture below. Because we want to “open” the exit after the count the position of the train counter is now right after the spit.

Figure 6: Exit design with train counter and module.

The counter module is similar to the one we have seen before, and now “opens” the exit when the counter train is at X (see picture); this will give a period red signal, which will give a red signal at the entry signals on the Main Line. Note: the starting signal of the train counter is an exit signal (next to the Not-Gate) and will not see the red signal from the one given by the counter train (on spot X).

Figure 7: Exit design without fail-safe and additional probability splitter.

The last thing needed was a fail save mechanism; this is needed to unblock the Main Line when the train cannot exit the Main Line – for example when the exit is occupied by some other train. The fail safe must trigger fast enough to make sure there is no slowdown at all. Because the trains have a length of 5T (5 Tiles) we needed a fail-safe length of at least 5. The small S-Curve in the picture below gave us a Fail-Safe trigger at 5.5T and gives the train a green signal 0.5T before the Entry Signal; which gave zero slowdown and still enough time to let the train chose the exit or not.

Figure 8: Exit design with fail-save mechanism

Whit the entry and exit working we could carry on with the rest of the network. As with any other SRNW we would have a main line with Full Trains and a main line with the Empty Trains. In the pictures below you will see some of the construction work of me and mfb in this game.



The trial of time

As with all networks, after some construction glitches emerge; little mistakes have to be corrected or rebuild in order to get it working properly again. With this SRNW a small mistake would be catastrophic. One of the first “upgrades” was the design of the entry mechanisms. We wanted trains only to be released when there was a free spot on the ML – instead of releasing regardless of the dummy count. This would also mean that the so-called overflow track, as depicted above in the entry design pictures, will never (if this mechanism would be 100% waterproof) be used and thus losing its purpose. In the picture below you will see the upgrades.

Figure 9: Improved entry design with “empty bay” check.

As you can see the new design looks much simpler. The release logic is much smaller and additionally the (4) empty bay check to block the green release signal when the ML bay is occupied. The (3) release Not-Gate is now also directly connected to the release signal, instead of going through the priority at the merge point on the ML – the priority down below is now only functional when for some unknown the train is released at a full bay, and then forces him onto the emergency line on the left.

Another issue is the dummy train distance on the ML. When the gap between the dummy trains starts to differ than how it should be; entering cargo trains may not get into the slot correctly or, the fail save mechanism fails because the dummy train is too close to the cargo train. This problem has been observed in a smaller replay single player game of this game by me. A solution to this problem is to “reset” the dummy trains somehow. The reset mechanism will not be discussed in this article.



Because of the low robusticity of this SRNW it was most of the times really antagonizing to see something fail. This was then fixed and the whole system was resetted. Resetting and finding new issues was the one thing this system didn’t  need. It was also unfortunate that little time was invested to finish the game, or at least to something close to a working network. Nevertheless, a great concept was born and some effort was put into it to get the basics working. Currently, I am replaying the game on a smaller map in a single player game; because at some point it will work for at least 99.99% :-).


[SPG_savegame] <– comming soon!


7 comments so far

  1. Bertus July 7, 2012 19:57

    Couldn’t you just do this using a different train length for each of the goods?

    You would not need to have your trains in a fixed order, nor would you need dummy trains as spacers.

    Just detect the train length and pull the trains off the ml using that.

    Just a thought. Maybe you thought of this?

    – Bertus

  2. LoPo July 7, 2012 23:33

    Bertus: yes we did 🙂 but we wanted to have a system what would also work with 20 different cargo types

    which then means you will have train lengths 1 till 20?! 😛 which will not be very efficient

  3. Bertus July 8, 2012 11:33

    Fair enough, it would work for 4 or 5 train lengths maximum I guess.

    And of course all the train-length optimized stuff (insert into ml only when the gap is big enough and without slowing down the ml) would be much harder if not impossible for multiple tl’s, which would be a BIG disadvantage.

    Liked the article.

    Cheers! – Bertus

  4. LoPo July 8, 2012 13:51

    thanks 🙂

  5. V453000 July 9, 2012 05:36

    Even train length splitting is already obsolete (although I do not think it was really used for SRNW purposes). You can simply route trains through an unreachable waypoint and use these unreachable paths to direct trains. (Just like in the current psg239 or psg223 – drop order does the same)

    There was some reason behind all of the small dummy trains but I cannot seem to remember what exactly it was, with the waypoints it would work just as fine. You could find the discussion in irc logs but from current point of view I do not see a reason for the TL1 dummies (even though I did originally :D)

    One big reason which did actually not apply in that pro-zone game attempt could be that with dummies, you could recognize between full and empty trains just by creating their own space/dummy. So when you would use one ring for everything, both full and empty trains, it would still work – where unreachable waypoints would not as that order does never change (due to being unreachable), thus not recognizing if train is loaded or not.

  6. LoPo July 9, 2012 12:08

    We used the dummies because we wanted to have no orders at all – this way they are just telling the splits when the start of a train slot is there.

  7. V453000 July 9, 2012 14:00

    Yeah sure but using the dummies is brutally complicated in compare to the unreachable waypoints, while it does basically the same thing on a network with separate full and empty trains. So I think the method would be incovenient in case it does the same. However as I noted, using one combined ML with full and empty trains might be reasonable to use that solution as I cannot think of any better at the moment.

Leave a comment

Please be polite and on topic. Your email-address will never be published.