[Outdated][Improvement 1.06] Conveyor belt corners don't automatically turn into T-junctions

When an existing conveyor belt is laid out in a corner and when the player attempts to connect another piece of conveyor belt.

The conveyor belt doesn’t attach.

This isn’t a graphical glitch as the connection is never made and pathing won’t find a path.

The only way to place the belt in this configuration is to remove the corner piece, place the straight belt first and attach the side belt later.

Hey,

have had the same again just a minute ago.
In most cases connecting a new conveyor to an existing one works as it should.
Making a T-shape crossing from a L-shape conveyor may work depending on the flow/direction of the existing and added conveyor.

So making a working T-shape crossing in 3 steps:
image
image
image

But with the opposite flow/direction of the existing conveyor it doesn’t:


image

It could be the same issue when expanding a T-shape crossing to an X-shape one:



So at all it is not impossible to get the crossing in the right shape with the wanted flow/direction but it was the reason for stuck production several times.

I hope this will help a bit …

Kind regards
M

I know that there are multiple work-arounds available and I’ve been using them extensively, but this is a bug that really needs to get fixed.

Thanks for adding more usecases to the bug report though, that will make it easier to test when it gets fixed!

Hey,

I agree.

Found another configuration that does not work as I would expect. When trying to connect two conveyors where the last tile of the first conveyor and the first tile of the second conveyor are parallel they don’t join:
image

image

image

Kind regards

This is definitely near the top of my list of things to fix. Sometimes it looks like I prioritize other things, but thats more because when i spot them its ‘oh thats trivial’ and can fix right now, but this specific bug…
I set aside time to fix it once, wrote loads of code…it didn’t work and I reverted it and put it off to the next patch.
Then I did exactly the same thing in the last patch.

Its actually a serious pain to fix, as the code for this sort of thing is way more complex than you would think. I think its due to the ‘crossroads*’ being the last tile in the placed sequence, but I still have not managed to work out the correct fix. Its more complex than it sounds because each ‘final’ tile is dependent upon the previous one placed in the placed sequence and just ARGGHHHH I have a headache!

Anyway… I’m not ignoring it, it bugs me too. I’ll give it another try today, but I want to release a patch today because I have a number of vital bug fixes pending.

*anything with multiple entrances or exits

Ok, I’ve actually made more progress on this today than any time before. The first two examples now work, that pesky third one does not, but its definitely better now. I may check this code in and then come back for a fourth swipe at it for 1.09 :frowning:

Will this affect laying 2 conveyors in parallel heading in opposing directions? Right now i can lay one headed up then come back down right beside it without the game auto linking it to the one beside and thats handy.

I have noted that clicking the miss aligned tile fixes the problem.

Cliff, I found another case that doesn’t even work at all:

No matter what I can’t get the 4 conveyors connected… only 3 of them at max, the 4th doesn’t work then.

If I had to take a wild guess then I assume that type of crossing just doesn’t exist in the game yet.

Excellent news Cliff that you looked and attempted to fix my bug report :slight_smile:

I think I see why you are having this much issues with this bug. Essentially every tile has 4 neighbours that each can be in 3 different states: in, no conveyor, out. That makes for 81 possible states of the tile you’re trying to figure out.

01 NW :NOT SW :NOT NE :NOT SE :NOT 02 NW :NOT SW :NOT NE :NOT SE : IN 03 NW :NOT SW :NOT NE :NOT SE :OUT 04 NW :NOT SW :NOT NE : IN SE :NOT 05 NW :NOT SW :NOT NE : IN SE : IN 06 NW :NOT SW :NOT NE : IN SE :OUT 07 NW :NOT SW :NOT NE :OUT SE :NOT 08 NW :NOT SW :NOT NE :OUT SE : IN 09 NW :NOT SW :NOT NE :OUT SE :OUT 10 NW :NOT SW : IN NE :NOT SE :NOT 11 NW :NOT SW : IN NE :NOT SE : IN 12 NW :NOT SW : IN NE :NOT SE :OUT 13 NW :NOT SW : IN NE : IN SE :NOT 14 NW :NOT SW : IN NE : IN SE : IN 15 NW :NOT SW : IN NE : IN SE :OUT 16 NW :NOT SW : IN NE :OUT SE :NOT 17 NW :NOT SW : IN NE :OUT SE : IN 18 NW :NOT SW : IN NE :OUT SE :OUT 19 NW :NOT SW :OUT NE :NOT SE :NOT 20 NW :NOT SW :OUT NE :NOT SE : IN 21 NW :NOT SW :OUT NE :NOT SE :OUT 22 NW :NOT SW :OUT NE : IN SE :NOT 23 NW :NOT SW :OUT NE : IN SE : IN 24 NW :NOT SW :OUT NE : IN SE :OUT 25 NW :NOT SW :OUT NE :OUT SE :NOT 26 NW :NOT SW :OUT NE :OUT SE : IN 27 NW :NOT SW :OUT NE :OUT SE :OUT 28 NW : IN SW :NOT NE :NOT SE :NOT 29 NW : IN SW :NOT NE :NOT SE : IN 30 NW : IN SW :NOT NE :NOT SE :OUT 31 NW : IN SW :NOT NE : IN SE :NOT 32 NW : IN SW :NOT NE : IN SE : IN 33 NW : IN SW :NOT NE : IN SE :OUT 34 NW : IN SW :NOT NE :OUT SE :NOT 35 NW : IN SW :NOT NE :OUT SE : IN 36 NW : IN SW :NOT NE :OUT SE :OUT 37 NW : IN SW : IN NE :NOT SE :NOT 38 NW : IN SW : IN NE :NOT SE : IN 39 NW : IN SW : IN NE :NOT SE :OUT 40 NW : IN SW : IN NE : IN SE :NOT 41 NW : IN SW : IN NE : IN SE : IN 42 NW : IN SW : IN NE : IN SE :OUT 43 NW : IN SW : IN NE :OUT SE :NOT 44 NW : IN SW : IN NE :OUT SE : IN 45 NW : IN SW : IN NE :OUT SE :OUT 46 NW : IN SW :OUT NE :NOT SE :NOT 47 NW : IN SW :OUT NE :NOT SE : IN 48 NW : IN SW :OUT NE :NOT SE :OUT 49 NW : IN SW :OUT NE : IN SE :NOT 50 NW : IN SW :OUT NE : IN SE : IN 51 NW : IN SW :OUT NE : IN SE :OUT 52 NW : IN SW :OUT NE :OUT SE :NOT 53 NW : IN SW :OUT NE :OUT SE : IN 54 NW : IN SW :OUT NE :OUT SE :OUT 55 NW :OUT SW :NOT NE :NOT SE :NOT 56 NW :OUT SW :NOT NE :NOT SE : IN 57 NW :OUT SW :NOT NE :NOT SE :OUT 58 NW :OUT SW :NOT NE : IN SE :NOT 59 NW :OUT SW :NOT NE : IN SE : IN 60 NW :OUT SW :NOT NE : IN SE :OUT 61 NW :OUT SW :NOT NE :OUT SE :NOT 62 NW :OUT SW :NOT NE :OUT SE : IN 63 NW :OUT SW :NOT NE :OUT SE :OUT 64 NW :OUT SW : IN NE :NOT SE :NOT 65 NW :OUT SW : IN NE :NOT SE : IN 66 NW :OUT SW : IN NE :NOT SE :OUT 67 NW :OUT SW : IN NE : IN SE :NOT 68 NW :OUT SW : IN NE : IN SE : IN 69 NW :OUT SW : IN NE : IN SE :OUT 70 NW :OUT SW : IN NE :OUT SE :NOT 71 NW :OUT SW : IN NE :OUT SE : IN 72 NW :OUT SW : IN NE :OUT SE :OUT 73 NW :OUT SW :OUT NE :NOT SE :NOT 74 NW :OUT SW :OUT NE :NOT SE : IN 75 NW :OUT SW :OUT NE :NOT SE :OUT 76 NW :OUT SW :OUT NE : IN SE :NOT 77 NW :OUT SW :OUT NE : IN SE : IN 78 NW :OUT SW :OUT NE : IN SE :OUT 79 NW :OUT SW :OUT NE :OUT SE :NOT 80 NW :OUT SW :OUT NE :OUT SE : IN 81 NW :OUT SW :OUT NE :OUT SE :OUT

each ‘final’ tile is dependent upon the previous one placed in the placed sequence

That sounds like you try to figure out what it should be on what it’s previous tile is and then decide the tile type on the surrounding tiles.

A problem like this I always try to break up in a single piece you can run automated tests on. Instead of trying to think of all possible states, make it abstract enough so you can reliably test out all permutations.

When adding conveyor belt, since a user is always entering (dragging) the tile from 1 of the 4 angles, you can eliminate the “none” from one of the inputs. That removes 1/3rd of the options.

01 USER : IN LEFT :NOT FWRD :NOT RGHT :NOT 02 USER : IN LEFT :NOT FWRD :NOT RGHT : IN 03 USER : IN LEFT :NOT FWRD :NOT RGHT :OUT 04 USER : IN LEFT :NOT FWRD : IN RGHT :NOT 05 USER : IN LEFT :NOT FWRD : IN RGHT : IN 06 USER : IN LEFT :NOT FWRD : IN RGHT :OUT 07 USER : IN LEFT :NOT FWRD :OUT RGHT :NOT 08 USER : IN LEFT :NOT FWRD :OUT RGHT : IN 09 USER : IN LEFT :NOT FWRD :OUT RGHT :OUT 10 USER : IN LEFT : IN FWRD :NOT RGHT :NOT 11 USER : IN LEFT : IN FWRD :NOT RGHT : IN 12 USER : IN LEFT : IN FWRD :NOT RGHT :OUT 13 USER : IN LEFT : IN FWRD : IN RGHT :NOT 14 USER : IN LEFT : IN FWRD : IN RGHT : IN 15 USER : IN LEFT : IN FWRD : IN RGHT :OUT 16 USER : IN LEFT : IN FWRD :OUT RGHT :NOT 17 USER : IN LEFT : IN FWRD :OUT RGHT : IN 18 USER : IN LEFT : IN FWRD :OUT RGHT :OUT 19 USER : IN LEFT :OUT FWRD :NOT RGHT :NOT 20 USER : IN LEFT :OUT FWRD :NOT RGHT : IN 21 USER : IN LEFT :OUT FWRD :NOT RGHT :OUT 22 USER : IN LEFT :OUT FWRD : IN RGHT :NOT 23 USER : IN LEFT :OUT FWRD : IN RGHT : IN 24 USER : IN LEFT :OUT FWRD : IN RGHT :OUT 25 USER : IN LEFT :OUT FWRD :OUT RGHT :NOT 26 USER : IN LEFT :OUT FWRD :OUT RGHT : IN 27 USER : IN LEFT :OUT FWRD :OUT RGHT :OUT 28 USER :OUT LEFT :NOT FWRD :NOT RGHT :NOT 29 USER :OUT LEFT :NOT FWRD :NOT RGHT : IN 30 USER :OUT LEFT :NOT FWRD :NOT RGHT :OUT 31 USER :OUT LEFT :NOT FWRD : IN RGHT :NOT 32 USER :OUT LEFT :NOT FWRD : IN RGHT : IN 33 USER :OUT LEFT :NOT FWRD : IN RGHT :OUT 34 USER :OUT LEFT :NOT FWRD :OUT RGHT :NOT 35 USER :OUT LEFT :NOT FWRD :OUT RGHT : IN 36 USER :OUT LEFT :NOT FWRD :OUT RGHT :OUT 37 USER :OUT LEFT : IN FWRD :NOT RGHT :NOT 38 USER :OUT LEFT : IN FWRD :NOT RGHT : IN 39 USER :OUT LEFT : IN FWRD :NOT RGHT :OUT 40 USER :OUT LEFT : IN FWRD : IN RGHT :NOT 41 USER :OUT LEFT : IN FWRD : IN RGHT : IN 42 USER :OUT LEFT : IN FWRD : IN RGHT :OUT 43 USER :OUT LEFT : IN FWRD :OUT RGHT :NOT 44 USER :OUT LEFT : IN FWRD :OUT RGHT : IN 45 USER :OUT LEFT : IN FWRD :OUT RGHT :OUT 46 USER :OUT LEFT :OUT FWRD :NOT RGHT :NOT 47 USER :OUT LEFT :OUT FWRD :NOT RGHT : IN 48 USER :OUT LEFT :OUT FWRD :NOT RGHT :OUT 49 USER :OUT LEFT :OUT FWRD : IN RGHT :NOT 50 USER :OUT LEFT :OUT FWRD : IN RGHT : IN 51 USER :OUT LEFT :OUT FWRD : IN RGHT :OUT 52 USER :OUT LEFT :OUT FWRD :OUT RGHT :NOT 53 USER :OUT LEFT :OUT FWRD :OUT RGHT : IN 54 USER :OUT LEFT :OUT FWRD :OUT RGHT :OUT

Take the 3 adjoining tiles, and sort them so that they are in the same order considering your origin tile (so if you drag from the south west in the tile and there is an outgoing conveyor on the north east with the other 2 empty, it should be the same result as coming from the south east with an outgoing conveyor on the north west).

From there on, you can create a decision tree or a matrix to find the correct type. There is a lot of rotational similarity so depending on your sprite layout, you might be able to cut out a lot of duplication (like with the T junction, where only a partial set of possibilities are considered).

Hopefully this will help you with your next attempt!