소행성 재처리로 하는 전설작이 주목받고 있는 시대임 당연하게도 여러 사람들이 레시피 가변형 재처리 시설도 여러개 출시함.


대부분 신호기를 쓰지 않는 형태로 청사진이 작성되고 있는데, 전력 소요가 꽤 크기 때문에 대부분 원자로, 핵융합로까지 우주선에 건설하게 됨. 필연적으로 우주선의 크기가 커지고 재처리와는 관계 없는 시설이 생겨서 엔진부 외에 발전부 까지 우주선에 구겨넣어야 하는 문제가 생김.


그래서 태양광으로도 충분히 동작하는 우주선을 만들고자 효율 모듈 신호기를 재처리 시설에 넣어봤음. 




기본형의 모습임. 위-아래로 연장 가능하고, 신호기를 겹치면서 좌-우로 연장 가능한 구조야.




연장한 모습




그냥 청사진만 쓰겠다면 이 부분은 읽을 필요는 없음.

기본형의 회로 체계에 대해 설명을 하겠음.






우선, 하나의 조합기에서 조건에 따라 여러 신호를 출력하려면 반드시 '각각' 이라는 와일드카드를 사용해야 함.

특히 조건을 비교해서 신호를 출력해야 하므로 특정 재처리 신호를 출력하는 조합기는 수량 비교 조합기를 주력으로 사용하게 됨.

그러므로 각각의 분쇄기에는 수량 비교 조합기가 한개씩 귀속 되는 형태를 가짐.


이 회로 체계의 주요 특징은 다음과 같음


1. 벨트 위에 있는 소행성을 읽고, 거기에 있는 소행성만 재처리 제작법이 지정됨.

2. 여러 소행성 중 어떤 것을 재처리 할지는, 무작위로 1개를 추첨함.

3. 분쇄기는 재처리 레시피만 사용하며 분쇄 레시피를 사용하지 않음.

4. 한번 재처리를 시작한 분쇄기는, 재료 소행성이 계속 공급되면 제작법을 변경하지 않음.

5 재료를 모두 소모하여 재료가 부족한 분쇄기는, 다시 무작위로 제작법이 변경됨. 



이 특징은 회로를 설명하면서 풀어서 설명하겠음.






ㄴ 벨트 리딩용 수량 비교 조합기에 관한 사진










ㄴ 소행성 재처리 신호 발생용 조합기에 관한 사진






ㄴ 기본적인 회로 체계 번호매김



해석


1. 벨트 위에 있는 소행성을 읽고, 거기에 있는 소행성만 재처리 제작법이 지정


먼저 회로는 1번 일정 신호기에서 시작 - 각각의 재처리 신호를 서로 다른 임의의 값으로 지정해서 '양수(n)로' 출력함.

나는 다음과 같이 임의로 지정함.


금속 일반 - 10 / 금속 고급 - 110 / 금속 희귀 - 1110 / 금속 특급 - 11110

탄소 일반 - 20 / 탄소 고급 - 220 / 탄소 희귀 - 2220 / 탄소 특급 - 22220

산화 일반 - 30 / 산화 고급 - 330 / 산화 희귀 - 3330 / 산화 특급 - 33330



6번 벨트 - 전체 내용물 읽기로 읽어옴.


6번 - 벨트 내용물 신호는 2번 수량비교 조합기의 녹색 입력으로 투입

1번 - 양수 재처리 신호는 2번 수량비교 조합기의 적색 입력으로 투입함.


2번 수량비교 조합기의 조건문을 해석하면, '어떤 소행성이 벨트에 있으면 지정한 양수 재처리 신호(n)를 2번 출력함(2n)' 임.




[녹색 입력] 금속 소행성 덩어리 > 0

그리고

[적색 입력] 각각 = 1(n=10)

일때

[녹색 출력] 적색 입력(n)을 2번(2n) 출력함.


위 조건을 해석하면, 금속 소행성 덩어리가 1개 이상 있을 때 1번 조합기의 금속 재처리 신호(n)를 두번 통과(2n) 시킨다는 뜻임.

입력에 금속 소행성이 1개 있으므로 조합기의 금속 재처리 신호(n=10)가 두번 통과되어 출력에 금속 재처리 20(2n=20)이 통과됨.



한편 벨트 위에 없는 고급 금속 소행성 덩어리는


[녹색 입력] 고급 금속 소행성 덩어리 > 0

그리고

[적색 입력] 각각 = 110


인데, 고급 금속 소행성 덩어리가 없으므로 고급 금속 재처리 신호(n=110)는 출력으로 통과 될 수 없음.



이와 같이 1번 일정 조합기, 6번 벨트를 통해 2번 비교 조합기의 출력으로 '벨트 위에 어떤 소행성이 있으면 재처리 신호를 통과시킴' 이라는 기능을 구현하였음.

이는 곧  '1. 벨트 위에 있는 소행성을 읽고, 거기에 있는 소행성만 재처리 제작법이 지정됨.' 과 동치가 됨.



2. 여러 소행성 중 어떤 것을 재처리 할지는, 무작위로 1개를 추첨함.


- 그렇다면 어떻게 무작위로 추첨을 하는가?

이것은 2번 비교 조합기의 출력, 4번 일정 조합기의 출력, 3번 선별 조합기의 입력, 5번 비교 조합기의 조건문으로 구현함.

먼저, 전선 연결은 다음과 같음.




2번 비교 조합기의 출력(2n)은 3번 선별 조합기의 입력(2n)으로 투입함.

3번 선별 조합기의 출력(2n)은 무작위 신호(= 무작위 2n)로 설정하고, 4번 일정 조합기와 5번 비교 조합기 입력에 연결함.

3번 선별 조합기는 적당한 틱마다 무작위 신호를 출력함. 나는 투입기 감지 시간등을 고려해서 14틱으로 설정함.






한편, 4번 일정 조합기의 출력은 1번 일정 조합기에 음수 처리를 한 신호임. 가령 특급 금속 재처리 신호는 -11110으로 출력하고 있음.



3번 조합기의 출력(무작위 2n)과 4번 조합기를 연결했으므로 5번 비교 조합기의 입력엔 양수(2n-n=+n)와 음수(-n)가 모두 존재하게 됨

5번 조합기의 입력 패널에서 정확히 볼 수 있다.



[적색 입력] 의 대부분의 값이 음수(-n)를 취하는데, 선별 조합기의 산화물 재처리(2n=60) 신호와 섞여서 입력에는 산화물 재처리만 양수(60-30=30)를 취하고 있음.

즉 무작위로 추첨된 '일반 산화물 재처리' 만이 양수(n=30)를 갖게 된 것이다.




이와 같이 선별 조합기를 통해 특정 1값만 양수를 취함으로써 '벨트 위의 여러 소행성 중 무작위로 1개를 추첨'하는 기능을 구현하였음.



다음으로, 추첨한 소행성에 대한 재처리 레시피를 지정하는 방법을 알아보자.  이것은 5번 조합기로 구현하는 기능이며, 제일 중요한 조합기이다.

먼저, 5번 조합기의 입력은 다음과 같다.



[녹색 입력] 9번 분쇄기 (제작법 설정, 제작중 포함 내용물 읽기 설정), 10번 투입기 (손 내용물 읽기 유지), 5번 조합기 녹색 출력 (되먹임)

[적색 입력] 4번 일정 조합기, 3번 선별 조합기 적색 출력 (= 여러 -n과 1개의 n)

이것을 잘 기억하고 5번을 해석해보자....


5번 조합기의 조건문 에서 '그리고' 만 13번 사용한 조건을 살펴보자.




[녹색 입력 일반 금속=0] 그리고 

[녹색 입력 일반 탄소=0] 그리고 

[녹색 입력 일반 산화물=0] 그리고

............

[녹색 입력 특급 탄소=0] 그리고 

[녹색 입력 특급 산화물=0] 그리고 

[적색 입력 각각>0]

일때

[각각 1] 을 출력함


이다. 이를 해석하면 다음과 같다.


녹색에 걸린 조건은 [9번 분쇄기의 내용물], [10번 투입기가 들고있는 내용물]을 감시하게 되는데, 어떠한 내용물도 없다면 조건을 통과하게 된다.

적색에 걸린 조건은 [적색 입력(n또는 -n)]의 부호를 감시하게 되는데, 양수(n)는 조건을 통과하게 된다.


녹색 조건과 적색 조건을 모두 통과하면 출력값을 지정하는데, 출력값을 각각으로 지정하였으므로, 적색 신호 n을 1로 변환해 출력하게 된다.

이때 n이 무슨 신호인가? '재처리 신호' 이다. 조건문을 한번 더 해석하면 다음과 같다.



'분쇄기, 투입기에 소행성이 없을때, 선별 조합기로 추첨된 재처리 신호(n)를 1로 바꾸어 출력한다'






사진으로 예시를 들면, 벨트 위에 금속 소행성 덩어리 1개가 있을때 n=10이 (사진의 입력 신호) 5번 조합기를 통과하여 금속 소행성 재처리 신호 1로 출력된다. (사진의 출력 신호)

이 재처리 신호를 분쇄기에 물려주면 분쇄기는 금속 소행성 재처리 제작법이 설정될 것이다.


이와 같이 비교 조합기, 선별 조합기를 통해 '벨트 위의 여러 소행성 중 무작위로 1개를 재처리' 하는 기능을 구현하였음.

이는 곧 '2. 여러 소행성 중 어떤 것을 재처리 할지는, 무작위로 1개를 추첨함.' 과 동치가 됨




3. 분쇄기는 재처리 레시피만 사용하며 분쇄 레시피를 사용하지 않음.



- 당연한 얘기다. 벨트 위에 희귀 철광석이나 특급 철광석이 수 백개 돌아다니면 기분이 째질테니까 ㅋㅋㅋ







분쇄기 뿐만 아니라 모든 유형의 제작 기계는 '제작법 설정' 태그가 있다. 이 태그는 적색 신호와 녹색 신호를 더해서 '양수' 일때만 적용이 된다.

분쇄기에 [소행성 아이템 신호] 또는 [분쇄 신호] 를 입력하면 분쇄 레시피가 지정되는데, 분쇄기는 '내용물 읽기' 태그를 사용하기 때문에 [소행성 아이템 신호] 때문에 분쇄 레시피가 잘못 지정될 위험이 있다.


9번 분쇄기에는 5번 조합기의 출력, 10번 투입기, 8번 일정 신호 조합기에 연결되어 있는데, 8번 조합기에 모든 유형의 [소행성 아이템 신호]를 충분히 큰 음수로 출력으로 지정해서 [소행성 아이템 신호] 로 인한 분쇄 레시피 지정을 방지함.




4. 한번 재처리를 시작한 분쇄기는, 재료 소행성이 계속 공급되면 제작법을 변경하지 않음.



- 분쇄기부터 접근해보자. 분쇄기는 제작법 선택, 내용물 읽기, 제작중인 내용물 포함 읽기 태그가 지정되어 있다.

[분쇄기와 녹색 선으로 상호작용하는] 투입기는 10번, 비교 조합기는 5번이다.

분쇄기의 녹색선은 투입기, 비교조합기의 입력과 출력에 되먹임 형태로 연결된다.


재처리가 시작된다는 기준은 투입기가 소행성을 집은 시점부터로 생각해도 좋을 것이다. (집은걸 분쇄기에 넣을 것이므로)

그러므로 투입기 (10번) 에 손에 든 내용물 읽기 태그를 활성화 하며, 투입기가 집어든 소행성은 5번 조합기의 녹색 입력까지 들어갈 것이다.


이 소행성 신호는 녹색 조합기의 비교 조건문에 입력되는데, 이건 너무 복잡하니까 실제 동작 상황으로 예시를 들어보자.



ㄴ 참고용. 밑에 내용이랑 정확히 같진 않음




1. 벨트 위에 특급 탄소 소행성, 고급 금속 소행성이 있음

2. 선별 조합기에서 무작위로 특급 탄소 소행성이 14틱 동안 지정되면서 5번 비교 조합기에 [적색 입력]특급 탄소 재처리 신호 22220 입력됨.

3. 비교 조합기에서 다음의 조건문을 만족하게 됨.


[녹색 입력] 모든 소행성 = 0, 그리고

[적색 입력] 특급 탄소 재처리 >0

이므로

[녹색 출력] 특급 탄소 재처리 = 1


4. 분쇄기에 특급 탄소 재처리 제작법이 선택됨. 그로 인해 투입기가 특급 탄소 소행성을 집으려고 함. 

4-1. 투입기가 14틱 동안 탄소 소행성을 집지 못하면, 다시 2번으로 돌아감.  

4-2. 14틱 안에 탄소 소행성을 집으면 5번으로 이동함.


5. 비교 조합기에서 다음의 조건문을 만족하게 됨.


[녹색 입력]특급 탄소 소행성 >0, 그리고

[적색 입력]특급 탄소 재처리 = 22220

이므로

[녹색 출력]특급 탄소 재처리 = 1


6. 한편 투입기가 소행성을 집고, 내용물을 읽은 '그 시점' 에서 비교 조합기의 입출력 상태는 다음과 같음


[녹색 입력] 특급 탄소 소행성 1, 특급 탄소 재처리 1 (되먹임 이므로)

[적색 입력] 특급 탄소 재처리 22220, 그외 나머지 음수 재처리 신호

[녹색 출력] 특급 탄소 재처리 1


7. '동시에' 비교 조합기에서 모든 소행성 = 0을 불만족하게 되며 여기서 특급 탄소 재처리 신호 1을 잃어버림.

'동시에' 5번 항목에서 


[녹색 입력]특급 탄소 소행성 >0, 그리고

[적색 입력]특급 탄소 재처리 = 22220

이므로

[녹색 출력]특급 탄소 재처리 = 1


조건문을 만족하면서 특급 탄소 재처리 신호 1을 다시 획득하게됨.


8. 이로서 결과적으로 특급 탄소 재처리 신호 1을 획득하는 조건문이 바뀌었지만, 신호는 단 1틱도 잃어버리지 않으면서 재처리는 지속되게 됨.


9. 그런데 여기서 선별 조합기에서 특급 탄소 재처리 신호는 폐기하고 고급 금속 소행성 재처리를 출력하게 되면?


10. 5번 항목에서 [적색 입력]특급 탄소 재처리 = 22220 부분을 상실하게 됨. 왜냐하면 선별 조합기의 출력 (2n=44440)을 받지 못했기 때문에 5번 비교 조합기의 입력에는 [적색 입력] 특급 탄소 재처리가 -22220 이 되었기 때문임.


11. 그런데 여기서 음수 조건이 있다


[녹색 입력]특급 탄소 소행성 >0, 그리고

[적색 입력]특급 탄소 재처리 = -22220

일때

[녹색 출력]특급 탄소 재처리 = 1


이런 조건문도 넣어놨다. 덕분에, 8번 항목처럼 재처리 신호 1을 획득하는 조건문이 또 바뀌었지만 역시 신호는 단 1틱도 잃어버리지 않았음.


12. 만약 시간이 지나서 선별 조합기에서 또 특급 탄소 재처리가 지정되더라도 걱정이 없다. 재처리 조건문에 양수도 있고, 음수도 있기 때문이다.


13. 이렇게 재처리 신호는 무작위로 지정되다가 투입기가 알맞은 소행성을 집는 순간, 적색 입력에서 재처리 신호를 양수와 음수를 번갈아가며 녹색 출력으로 재처리 신호 1을 지속적으로 출력하게 된다.

녹색 출력은 녹색 입력으로 되먹임 되면서, 재처리 신호를 유지하게 된다.


최종적으로, 분쇄기는 재료로 사용하는 소행성 덩어리가 0이 되기 전까지 계속 재처리를 실행할 것이다.



이와 같이 '한번 재처리를 시작한 분쇄기는, 재료 소행성이 계속 공급되면 제작법을 변경하지 않음' 이라는 기능 또한 구현하였다.



5. 재료를 모두 소모하여 재료가 부족한 분쇄기는, 다시 무작위로 제작법이 변경됨. 



분쇄기가 재처리를 반복하다, 소행성 덩어리가 0이 되면, 다시 다음 조건문으로 무작위 제작법을 설정할 것이다.


[녹색 입력 일반 금속=0] 그리고 

[녹색 입력 일반 탄소=0] 그리고 

[녹색 입력 일반 산화물=0] 그리고

............

[녹색 입력 특급 탄소=0] 그리고 

[녹색 입력 특급 산화물=0] 그리고 

[적색 입력 각각>0]

일때

[각각 1] 을 출력함


----


이렇게 다음 특징을 만족하는 가변 소행성 재처리 회로 체계 해석이 끝났음.


1. 벨트 위에 있는 소행성을 읽고, 거기에 있는 소행성만 재처리 제작법이 지정됨.

2. 여러 소행성 중 어떤 것을 재처리 할지는, 무작위로 1개를 추첨함.

3. 분쇄기는 재처리 레시피만 사용하며 분쇄 레시피를 사용하지 않음.

4. 한번 재처리를 시작한 분쇄기는, 재료 소행성이 계속 공급되면 제작법을 변경하지 않음.

5 재료를 모두 소모하여 재료가 부족한 분쇄기는, 다시 무작위로 제작법이 변경됨. 


----


이제 남은 것은 소행성 덩어리 출력 되먹임 라인, 전설 출구 등등을 만들면 되는데, 이건 그냥 간단하게 분배기 우선순위랑 벨트 활성화 제어로 마무리 했음.

소행성 덩어리는 우선 메인 공급라인에서 우->좌로 이동하면서 들어가고, 재처리 끝난 소행성 덩어리들을 우선적으로 재투입하게끔 벨트를 구성했음. 물량 처리능력은 무난하게 돌아가는 듯 함.





회로 설명도 끝났고, 벨트 설명도 간단하게 했음. 실제로 우주선에 설치 할 블루프린트 주소임.

덤으로 내가 자주 쓰는 전설작 우주선도 블프 집어넣어놨음


https://factoriobin.com/post/tv9ghi



원래 tileable하게 설계해놨는데 분쇄기마다 선 연결해야하는게 200% 실수할 것 같아서 자주쓸 것 같은 유형별로 청사진에 넣어놨음.

회로체계 씹고뜯어서 더 효율적인 재처리 선정 알고리즘이나, 더 공간 효율적인 디자인이 있으면 나도 보고싶다