Friday Facts #122 - Better Circuit Network I

Posted by Robert on 2016-01-22

This week's Friday Facts is brought to you by Robert aka Twinsen aka that Romanian dude aka the Combinator guy. I'll be talking about the improvements that have been done so far in 0.13 to the circuit network.

Graphical improvements

The previous combinators were quite big. Having a bunch of them connected close to each other didn't look nice and was hard to understand, so Vaclav made a couple of improvements to the sprites, including making them smaller.
The constant combinator can now also be rotated so you can make the connections easier to see and understand.
And short wires are rendered better.

Combinators will show some info in alt mode. Showing all the necessary information in such a small space is tricky, so for now some icons are shown, including input and output arrows.

General improvements

The constant combinators were often used to turn some logic on and off. Now there is an on/off switch in the gui to make this a bit simpler. It's has a small light on it to show that

Lamp colors can now be changed. The way it's done is by sending a color signal to the lamp. When the condition inside the lamp passes, instead of lighting up white, it will use that color. Other possibilities were sending RGB codes or setting a specific condition for each color, but I decided for the simple option.

Apart from that:

  • Added more virtual signals.
  • Roboport is connectable to the circuit network. It sends the logistic network contents.
  • Requester chest's requested items can be set automatically from the circuit network.
  • The power switch you already know about.

Combinator and circuit network design concepts

I would like to talk a bit about some of the rules I created for myself when designing the way combinators and circuit network works.

The main purpose of the circuit network is to make it easy to do basic factory logic like "start this pump when petroleum gas < heavy oil + light oil". Simple comparisons and simple arithmetic.

An intended side effect is that you can fairly easily make a turing machine. If you want to geek out and create a computer that calculates prime numbers you can do it, but this is not the main function of the combinators.

I also have kind of a design rule to try not add new entities in the game(not just combinator entities, entities in general), for a number of reasons:

  • It's easier to get into the game without being overwhelmed by an unreasonable amount of content.
  • One of the core fun things about Factorio is that you can combine few things in many ways. It's fun when you discover that you can use or connect an entity in many different ways.
  • Cleaner toolbar and inventory.
  • In the end game, some people like to have a factory that makes all the possible entities in the game. Too many entities means unreasonably big manufacturing location.

Keeping these things in mind it's a rather hard decision to add new types of combinators in game. Many people have asked for logic combinators, bit combinators, timers, etc. But because of the reasons mentioned above, I believe it is not worth it.

Finally, I know there is no real incentive to understand and use the circuit network, it's not part of the core gameplay, you can finish the game without it with no problems. I have no problem with that, I see the circuit network as a way to geek out and fine tune your factory even further if you feel the need to.

To be continued...

There is still a big change coming to the circuit network that I didn't talk about yet. Stay tuned next Friday for more details...
Also keep in mind that I will try to connect more entities to the circuit network before 0.13 is out.

Community Spotlight

Last week, someone posted on the forum asking why the splitter is working in a seemingly weird way. So the community started to investigate the way the splitters work and somehow managed to create an item sorter using just belts and splitters. One of the designs is shown below:

You can read all about it in the forum topic.
When we saw this in the office it even took us a while to understand how they work. In the meantime, someone made a video explaining it.
The whole idea is based on the fact that splitter works per item type. It remembers where it sent the last item of a specific type and tries to send it in the opposite direction next time. By taking advantage of this internal state, sorters can be made.
It works like this since very long ago. This was implemented to prevent the fact that in some situations, the two lanes of a belt (with one item type on each) would be split in two belts with one item type each. But as someone noticed, this leads to other small problems.
In light of all this information, we are considering changing the way splitter works. Possibly by making have an internal state per transport belt lane instead of per item. It will split each lane of each belt equally to the output.

For comments and suggestions, feel free to PM me or comment at the forums.