Given for example, a Hydrogen atom (that can only have 1 bond max), that is sitting on a bonder next to two other atoms that are also on bonders and have available bonding slots, how is it determined which atom the Hydrogen ends up bonding to? I've tried experimenting with it being a priority order of directions, but that doesn't seem to be correct.
I'm afraid there's no real science behind this. Each bonder has a priority number likely based on the internal data structure (array, linked list, whatever). The game just processes this list in a first through last order. So the bonding order in game is just how the bonders happen to be arranged. I would be nice if they were labeled, but as far as I know there's no way to get their priority in game. So with two bonders linked, it just goes through the list sequentially. For example, with 4 bonders the list of checked links would look something like this:
- (1, 2)
- (1, 3)
- (1, 4)
- (2, 3)
- (2, 4)
- (3, 4)
Which is simply an ordered list of the pairs of priority numbers. With that knowledge, you just need to know which bonder has which priority. Though experimentation I've found that:
For 4 bonders in a fresh level the bonder priority numbers are:
1 - 2 | . | 4 - 3
For a fresh level with 8 bonders the bonder priority numbers are:
1 - 2 | . | 4 - 3 | . | 5 - 6 | . | 8 - 7
I don't think that there is a strict order of bonder preference; it is based on something else.
I did the following experiment: three bonders in a horizontal row, with an unbonded H at each one. I recorded the results of the six combinations of bonders.
# order result side a 1 2 3 H-H H L b 3 2 1 H-H H L c 2 3 1 H H-H R d 1 3 2 H-H H L e 3 1 2 H H-H R f 2 1 3 H H-H R
I reran this many times, and there was always a 50% split with one group preferring 'L' bonding, one group preferring 'R' bonding, and one group being split. (Each group is identified by the bonder in the middle.)
So there is evidently some structure to the evaluation, but each of these six cases is contradicted by another one (if we assume the bonders evaluate in order); i.e., if (a) is the correct order, then why in (b) does the bonder prefer (2,3) over (1,2)? This is true for every case.
The mouse wheel trick seems to be doing something (it made a click and I assume processed an action), but I could not change the output of (a).
I used a few hours testing. The result is that there is a hidden priority, but the bonder only checks the bonder right and under it. That means if there are 4 bonders build up the following way:
2 3 1 4
First bonder 1 will check below and right of it and can't find anything to bond. The second step is that bonder 2 will bond with bonder 3 and 4. Afterwards bonder 3 bonds with 1 and last bonder 4 doesn't find anything to bond.
If a bonder has two possible connections (right and under it), then it will bond first with the bonder with the higher priority (lower number). That means the second step bonder 2 will first bond with 3 and then with 4.
Some of the other answers are wrong, and it bugs me that the rest is split over multiple posts, so based on thorough research here is my definitive list of how bonding works:
- Each bonder has an invisible priority number, 1-8. This number is determined by its initial position in the reactor.
- Bonding proceeds with an outer loop across all the bonders and an inner loop across all the bonders. So if there are 4 bonders, the order it checks is (1,1), (1,2), (1,3), (1,4), (2,1), (2,2), (2,3), (2,4), (3,1), (3,2), (3,3), (3,4), (4,1), (4,2), (4,3), (4,4).
- However, bonding only occurs if the second bonder is directly below or to the right of the first bonder. (Credit to Timbo for figuring this out.) This is why the list above doesn't lead to double-bonding: If the layout is 2-1, then the entry (1,2) in the list above doesn't trigger, since 2 (the second bonder) is to the right of the first bonder.
- Bonder order is not affected by mouse-wheeling on the bonders, at least not in the latest version. Yes, it makes a clicking sound, but I could not get the bond order to change on my test molecule of BO2 no matter how I mouse-wheeled. This is supported by the fact that mouse-wheel clicks are not saved in the undo history like everything else.
- The bonder order is different for different reactor types:
1 3 2 4
1 2 3 4
Research (2) (Presumably, can't verify)
1 2 3 4 5 6 7 8
5 1 3 7 6 2 4 8
Yes, there are two different layouts for the "standard" 2x2 square, and yes, the Super-Bonder really is that weird.
Lastly, here are some practical tips for how to debug a balky design:
Let's say you're trying to make the molecule HP≡CO, in a bent configuration. You make a 2x2 square of bonders and your input looks like this:
P=C H O
But when you bond it, it comes out like this:
P≡C | H-O
Given how bonding works, we can deduce that the lower-left bonder is running before the upper-left bonder, so swapping them will fix it. The relative priority of the other two bonders doesn't matter.
However, if your failing output was rotated like this instead:
H P | ⦀ O-C
In this case, the lower-left is before the upper-right, and you have to swap diagonally. The priority of the two bonders on the opposite diagonal doesn't matter. The difference in the two examples comes from the rule that bonds only form to the down and right.