Page 1 of 1
Combinators not behaving as expected
Posted: Mon Dec 27, 2021 5:36 pm
by 000
Or, Yet another combinator noob thread.
I can't get a combinator to behave the way I want, and since it doesn't work the way I expect, I have no idea how to even attempt what I want it to do.
Combinator A sends a signal from a larger circuit. This works as intended. The signal is `L = 1`
Combinator B read train contents. It is supposed to send a signal if, and only if, Green Circuits = 4k. The signal it sends is `Green Circuits = 1`
Combinator C reads both signals. It is set to `Everything = 1`. It sends a signal if this is true.
Currently, only A is sending its signal. Yet, C is also sending its signal, even though Combinator B is not sending.
I tried setting C to Each instead with no change.
How do I make C only send its signal if every single signal it's getting is 1?
Re: Combinators not behaving as expected
Posted: Mon Dec 27, 2021 7:35 pm
by quyxkh
Zero value signals are not sent at all. Everything = 1 means everything that isn't zero = 1. Anything = 0 will never match.
You can make both combinators send the same go-signal and fire only when your go signal is 2, or supply a second input to your current comparison, a constants box with L=1 and Circuits = 1, and match on Everything = 2.
edit: the only time you can detect a zero signal is when you explicitly refer to that signal's value, compare it to zero or multiply it by something or some such.
Re: Combinators not behaving as expected
Posted: Mon Dec 27, 2021 10:28 pm
by 000
Well this complicates matters.
I'd read that an absent signal is read as 0, so I thought that meant that combinator C would getting one signal at 1, and one signal at 0.
Does this mean signals are added together? Two signals at 1 will be read as one signal at 2?
Edit: Remembered sandbox exists. Looks like that is indeed the case. I can work with this.
Thanks for the help.
Re: Combinators not behaving as expected
Posted: Mon Dec 27, 2021 11:00 pm
by robot256
The Everything condition is certainly one of the less intuitive behaviors. You know which signals you are trying to send, and which are being sent as zero, but the combinator can't distinguish between L=0 and the other hundred signals you aren't using, which are also zero. If it checked them too, it would never fire.
This is why some circuits will apply an offset, like -1000000, so that a nonzero value can represent that this signal is important, but also zero items are present. Then it gets converted back with +1000000 later.
Re: Combinators not behaving as expected
Posted: Mon Dec 27, 2021 11:39 pm
by quyxkh
000 wrote: Mon Dec 27, 2021 10:28 pm
Does this mean signals are added together? Two signals at 1 will be read as one signal at 2?
The way I have it is, the value of a signal on a wire is the sum of that signal's values on all connected output ports. Likewise, the value of a signal a device sees is the sum of that signal's values on all connected input ports.
Most devices have dual-use ports, both input and output, you can watch for instance an inserter wired to something neutral like an electric pole and set read-hold (or even read-pulse though that's more confusing to watch), enable-if everything < 0, it disables pickup as soon as it gets anything so it'll only ever pick one item off a belt. There's tricks you can do with this that come in handy sometimes.