1.아방가르드하지 못한 회로 꼬라지
팩토리오에서 사용되는 각종 잡템들을 별도 생산라인으로 한 곳에 모아놓고 만드는 걸 다이소라고 부른다. 일일이 손으로 만들기는 귀찮은 수많은 아이템들을 조립기계를 통해 자동으로 미리 만들어놓고 나중에 필요할 때 가져가는 방식을 말하는 건데, 그 수많은 종류의 아이템들을 각각 조립기계 하나씩을 배정해서 만들면 다이소의 면적이 굉장히 커지기 때문에 예전에 회로를 사용해서 조립기계 두 개만으로 모든 아이템들을 만드는 방법을 소개한 적이 있었다.
위의 사진은 전에 썼던 글에서 마지막에 최종 완성본이랍시고 올린 사진인데, 회로에 대해 잘 모르는 사람이라 하더라도 딱 봤을 때 아 저건 뭔가 좀 아닌데 싶은 생각이 들 것이다. 당시에는 저 방식이 최선이라고 여겼었고 일단 기존 다이소 방식과 비교했을 때 면적을 획기적으로 줄이기도 한 데다가 어쨌든 작동 자체는 잘 되었기에 그 때는 굉장히 만족하면서 글을 올렸었지만, 시간이 지날수록 부족한 부분이 눈에 들어와서 한 번쯤은 업데이트를 하는 게 좋겠다는 생각이 들었다.
이 글은 예전에 썼던 글에서 일부분을 보완 및 수정하고 약간의 내용을 추가한 예전 글의 후속편 쯤 되는 글이다. 기본적인 원리에 대해서는 예전 글에서 대부분 설명하였기에 이 글에서 중복해서 설명하지는 않을 것이며 회로 배치 또한 예전 글에서 설치된 회로를 이어서 수정하는 방식으로 진행할 것이므로 아래 내용을 읽기 전에 위 링크의 글을 읽고 오는 것을 권장한다.
2. 들어가기 전에
팩토리오에서 조건 검사나 수량을 계산할 때 쓰이는 회로용 조합기들은 입력값을 받은 후 - 출력값을 내보낼 때 약간의 시간(1틱)을 소모한다. 따라서 위 사진처럼 조합기들을 주렁주렁 설치했을 경우 설치한 회로의 길이만큼 결과값을 계산하는데 시간이 더 걸리게 된다. 물론 시간이 더 걸린다고 해봐야 사람이 제대로 느끼지도 못할 만큼 짧은 시간밖에 안 쓰므로 어지간한 경우에는 조합기를 아무리 많이 깔더라도 곧바로 값이 나오는 것처럼 느껴지겠지만, 여러 설비를 동시에 조작하고자 하는 경우에는 아무리 짧은 시간이라 하더라도 어떤 설비에는 신호가 들어가고 어떤 설비에는 들어가지 않아 의도치 않은 오류를 일으킬 수 있다.
이번에 만들 다이소를 예로 들 경우, 이미 필요한 재료가 전부 채워졌음에도 '재료가 다 찼다'라는 신호가 투입기에 늦게 전달되어 불필요한 재료를 추가로 투입하거나, 다른 물품을 만들기 위해 재료를 바꿔야 하는 상황에서 '다른 재료를 넣어라'라는 신호가 늦게 전달되어 엉뚱한 물건을 집어넣는 상황이 발생할 수 있다.
따라서 해당 상황을 방지하기 위해선 설치되는 투입기의 갯수를 최대한 줄이거나, 반대로 일부러 신호를 지연시켜서 다른 신호들과 동시에 전달되도록 타이밍을 조절해야 한다. 이 글에서는 해당 조건들을 다 고려하여 오류가 나지 않도록 조정을 마친 상태이기에 그대로 따라한다면 문제가 없을 테지만, 만약 그대로 따라하지 않고 본인 공장 상황에 맞춰서 개조/수정을 해보려는 사람이 있다면 해당 조건을 고려하여 조합기들의 수량을 적절하게 조절하기를 바란다.
조합기의 출력을 그대로 입력에 연결해서 입력되는 신호가 사라지더라도 값을 여전히 유지시키는 조합기의 형태를 '메모리 셀'이라고 부른다. 출력되는 값을 그대로 입력하고, 입력된 값을 다시 그대로 출력해서 조합기 안에 신호를 유지시키는 원리인데, 이름은 거창해도 그냥 입력부랑 출력부랑 선으로 연결한 조합기라고 생각하면 된다. 아래에서 가끔 메모리 셀이 어쩌고 하는 내용이 나올 텐데 그냥 조합기의 입력부랑 출력부랑 선으로 연결했다는 내용으로 이해하면 되겠다.
와일드카드에 대해서는 예전에 쓴 글에서 이미 설명을 하였으므로 여기서는 설명을 생략하려고 한다. 다만 기능과는 별개로 와일드카드의 이미지가 당시 글을 쓰고 난 이후에 한 번 바뀌었기 때문에 헷갈리지 않도록 미리 예전 이미지와 현재 이미지를 첨부하였다. 노란색 바탕에 작대기 3개가 들어간 중앙의 아이콘이 와일드카드 '각각'이고 빨간색과 초록색이 '모두'와 '아무거나'이다. 색깔은 바뀌기 전이나 후나 동일하므로 그냥 '노란 그거', '빨간 그거' 정도로 기억하면 된다.
3. 개판난 조합기들부터 정리하기
우선 난잡하게 배치되어 있는 수량 비교기들부터 정리하는 걸로 시작하겠다. 당시에는 '이 물품이 n개보다 적으면 신호 출력'이라는 식으로 물품 한 종류당 수량 비교기 하나씩을 배치해서 압축형 다이소를 완성했었는데, 때문에 만들려는 물품의 종류가 많아질수록 수량 비교기들을 우르르 깔아야해서 보기에도 지저분하고 수정하기에도 불편해졌다. 그러니 일단 저 부분부터 갈아 엎어보자.
일정 신호기 하나를 설치한 다음 만들기를 원하는 물품들을 전부 신호기에 입력해준다. 이번에도 당시와 마찬가지로 총 30종류의 물품을 만들려는 순서대로 수량이 증가하도록 설정해서 만들어보도록 하겠다. 종류도 수량도 당시와 동일하게 설정하였다.
저렇게 조합기 하나에 신호들을 다 때려박으면 각각의 신호들을 어떻게 비교할 건가 싶을 텐데, 수량 비교기에서 와일드카드 '각각'을 사용하면 신호를 몇십 개를 쓰든 몇백 개를 넣든 각 신호들을 전부 개별적으로 구분해서 비교가 가능해진다. '각각' 옆에 별도로 표시한 체크박스는 조합기에 입력되는 신호 채널을 나타내는 건데 R은 빨간선, G는 초록선으로 들어오는 신호를 뜻한다. 기본적으로는 저 두 체크박스가 모두 체크되어 있을 테지만 저런 식으로 한 쪽만 체크할 경우 해당되는 신호 채널의 신호만 인식하게 만들 수 있다.
위의 사진의 경우 '초록선으로 들어오는 각각의 신호들 중에서 빨간선으로 들어오는 신호들보다 작은 신호가 있을 경우 = 해당 신호들을 출력'하도록 하는 설정이다. 따라서 방금 만든 일정 신호기를 빨간선으로 입력부에 연결하고 상자 안의 물품들을 초록선으로 입력부에 연결하면 '상자 안의 물품들 중 일정 신호기에 입력된 물품보다 수량이 적은 물품이 있을 경우 = 해당 물품들을 결과값으로 출력'하도록 만들 수 있다.
즉, 수많은 수량 비교기들을 난잡하게 깔아놓을 필요 없이 일정 신호기 하나랑 수량 비교기 하나로 모든 물품의 수량 체크가 가능해진다는 뜻이다. 기존에 깔아놨던 수량 비교기들은 싹 다 철거하고 단 하나만 남겨놓은 뒤 위 사진처럼 연결해주자.
깔-끔해진 다이소에 모습에 잠깐 감탄하는 시간을 가진 후 수량 비교기의 출력부와 각 공장들을 마저 연결해주면 얼추 수정이 완료된 것처럼 보인다. 이제 정말로 수량 비교기 단 하나만으로 수많은 물품들을 만들 수 있을지 확인해보도록 하자.
음... 안타깝게도 뭔가 문제가 생긴 것 같다. 아무리 시간이 지나도 만드는 물품이 빨간 지하벨트에서 넘어가지를 못하고, 계속 재료를 투입하고 만들려다 취소를 반복하며 상자에는 재료용 톱니바퀴가 쌓여만 간다.
출력부와 각 공장들을 연결하기 직전의 상황을 다시 한 번 살펴보자. 수량 비교기에 연결된 빨간선과 초록선 중 빨간선에서는 일정 신호기에서 정해진 신호가 일정하게 들어갈 테니 저 부분은 문제가 없을 것이다. 문제가 있다면 아마 초록선 쪽에서 뭔가 삑사리가 나서 다이소가 제대로 안 돌아가는 것일 테니, 저 사진에서 어떤 부분이 문제를 일으키는지 찾아내야 한다.
방금 전 와일드카드를 써서 일정 신호기의 신호들과 '상자 안의 물품들'을 비교하는 부분에서, 다이소가 작동하는 동안 투입기가 상자 안의 물품들을 빼내기도 하고, 그 빼낸 물품들을 공장에 재료로 넣어버리기도 할 테니, 정확하게는 상자 안의 물품만 비교하는 게 아니라 '투입기가 들고 있는 물품'과 '공장에 재료로 투입된 물품'까지 전부 합쳐서 일정 신호기의 신호들과 비교해야 한다.
그러나 위의 사진에서는 '투입기가 들고 있는 물품'까지는 수량 비교기가 인식을 할 수 있는데, '공장에 투입된 물품'들은 회로 선이 연결되어 있지 않으므로 인식할 수 있는 방법이 없다. 때문에 공장에 물품이 투입된 순간 해당 물품이 사라진 것으로 회로가 인식해서 다시 그 물품을 만들려고 하는데, 그러기 위해 공장에 투입됐던 물품을 다시 빼내는 순간 회로가 다시 수량을 정상적으로 인식해서 다음 물품을 만들려고 하고, 해당 과정이 영원히 반복되서 다이소가 제대로 작동을 하지 않게 된 것이다.
그럼 그냥 공장이랑 비교기랑 선으로 연결하면 되는 거 아니냐고? 초록 선으로 연결하면 똑같이 초록 선으로 연결된 '상자 안의 물품들'이 초록 선을 통해 공장으로 흘러들어가서 오류를 일으킬 테고, 빨간 선으로 연결하면 일정 신호기의 신호가 흘러들어가서 역시 오류를 일으킬 것이다. 신호 채널은 빨간색 초록색 두 개밖에 없는데 연결해야 하는 선은 세 개나 되다보니 어떻게 하든 합선으로 인해 오류가 생길 수밖에 없을 것이다. 그럼 어떻게 해야 할까?
여기서 등장하는 게 저번 글에서 언급했던 와일드카드를 이용한 일방통행 전선이다. 산술 연산기를 하나 추가해준 뒤 상자들이 연결된 초록색 선과 공장이 연결된 빨간색 선을 입력부에 연결하고 값을 그대로 뱉어내게 만들어준 다음
그 합쳐진 신호를 초록색 선으로 수량 비교기에 연결하면 세 가지 신호를 합선의 위험 없이 조합기 하나에 전달할 수 있게 된다. 수량 비교기의 출력부는 방금 전과 동일하게 각각의 공장에 연결해주면 된다. 이제 공장에 투입된 물품도 인식할 수 있게 수정을 마쳤으니 다시 한 번 결과를 보자.
(으아아아아아 64배소오오오오옥)
아주 좋다. 조합기를 물품 종류만큼 줄줄이 설치할 필요 없이 산술 연산기와 수량 비교기와 일정 신호기를 각 한 대씩만 써서 이전과 똑같은 결과물을 만들어내었다. 이번에도 한 번에 2개씩 만들어지는 물품들 때문에 약간 삐져나온 물건들이 있긴 한데, 그것까지 포함해서 원하던 결과가 나왔다는 뜻이니 다이소 압축에 이어서 회로 압축까지 성공했다고 할 수 있겠다.
3-1. 근데 재료도 같이 만들면 안 되나?
여태까지는 재료들은 벨트로 투입하고 완제품만 다이소로 만드는 방법을 소개했는데, 그러지 말고 아예 중간 재료들까지 다이소로 한 번에 만들어서 써보고 싶은 사람들도 있을 것이다. 예를 들어 철판, 톱니바퀴, 구리판, 구리선, 녹칩들을 전부 외부에서 가져오는 게 아니라 철판이랑 구리판만 공급하면 톱니바퀴, 구리선, 녹칩은 다이소에서 만들게 하고 그렇게 만들어진 재료들을 다시 다이소에서 써서 완제품을 만들게 하면 외부에서 가져와야 하는 재료들이 확 줄어들게 될 것이다.
그러나 회로로 제작법을 설정할 때 여러 신호들이 동시에 입력될 경우 아이템 창에서 가장 앞에 있는 물품의 신호가 우선순위를 가지게 되는데, 톱니바퀴나 구리선 같은 '재료' 탭은 '물류'탭이나 '생산'탭보다 한참 뒤에 있어서 먼저 만들어져야 하는 물품들임에도 불구하고 생산 순서가 한참 뒤로 밀리게 된다. 벨트를 만들려면 톱니바퀴가 필요한데 톱니바퀴를 만들려면 벨트가 다 만들어진 상태여야 한다니, 골치가 아파온다.
모든 신호가 동시에 들어가게 되면 재료들을 먼저 만들 수 없으므로, 완제품들보다 재료들이 먼저 만들어지게 하기 위해선 재료들이 다 만들어지기 전까지는 재료들보다 우선순위가 높은 완제품들의 신호를 차단했다가, 재료들이 다 만들어지고 나면 다시 완제품들의 신호를 받게 하는 식으로 회로를 짜야 한다. 조합기들을 추가하고 배선도 수정하는 등 회로가 좀 더 복잡해지겠지만 그래도 중간재료들까지 공장 하나에서 전부 만들 수 있다면 외부에서 가져와야 할 재료들이 훨씬 간소화될 테니 노력한 만큼의 성과는 나올 거고, 무엇보다 낭만이 쩔지 않은가. 효율 따위 신경쓰지 말고 어디 한 번 만들어보자.
방금 만든 다이소 위에 일정 신호기를 추가한 뒤 만들기를 원하는 재료들을 만들고 싶은 만큼 수량을 써서 입력해준다. 이번 글에서는 5종류의 재료들을 각 100개씩 만들도록 설정했다.
그리고 수량 비교기를 추가한 뒤 방금 만든 일정 신호기와 기존의 일방 통행기를 입력부에 연결하고 위와 같이 설정해준다.
첫번째 조건은 만들어진 재료들의 수량이 설정한 수량보다 부족할 경우 B라는 신호를 출력하는 설정이다. A는 이미 '작동 여부 읽기'에서 쓰고 있으므로 B로 설정하였다. 결과값으로 1이라는 값을 출력하게 설정했는데도 실제로는 5라는 값이 출력되고 있는데, 이는 부족한 재료 5종류가 각각 1씩 신호를 출력하는 게 합쳐져서 저렇게 나오는 거다. 재료들이 만들어질수록 값이 1씩 줄어들다가 재료가 전부 만들어지면 0이 될 것이다. 기존 수량 비교기와 합선이 생기는 걸 방지하기 위해 이번에는 일정 신호기를 빨간선이 아닌 초록선으로 연결하였으므로 R과 G의 순서를 바꿨다는 것을 잘 확인하자.
두번째 조건은 다이소가 작동 중일 때도 B라는 신호를 출력하는 설정이다. 2번 문단에서 회로가 길어질수록 신호가 도달하는데 오래 걸린다고 설명했는데, 회로용 조합기들을 추가하면서 생기는 신호 지연이 회로를 뻑나게 하는 상황을 방지하기 위해서 해당 조건을 추가한 것이다. 저 조건이 어떻게 작동하는지는 바로 밑에서 설명하겠다.
이제 처음 설치했던 일정 신호기를 위로 조금 옮겨주고 그 사이에 수량 비교기 하나를 끼워넣어 준다. 그리고 'B가 0일 때만 모든 신호를 그대로 출력'하도록 설정해준다.
갑자기 등장한 저 뻘건 신호는 뭔가 싶을 텐데, 저건 와일드카드 '모두'라는 기호로 입력된 모든 신호를 그대로 출력해주는 용도다. 기존에 쓰던 노란 '각각'은 조건에 '각각'이 쓰여야 출력에도 '각각'을 넣을 수가 있는데, 조건에 '각각' 대신 B를 넣어버렸기 때문에 출력에 '각각'을 쓸 수가 없어서 '모두'를 대신 넣었다. 일방 통행기에 쓰인 '각각' * 1 = '각각'처럼 입력된 신호를 그냥 그대로 출력해주는 용도라고 생각하면 된다. 다만 무조건적으로 그대로 출력하는 게 아니라 'B가 0일 때만' 출력하도록 설정한 것이다.
따라서 중간 재료들이 원하는 수량보다 모자랄 때는 방금 만든 수량 비교기의 첫번째 조건에 의해 B신호가 전달되어 완제품들의 신호를 차단했다가 모든 재료들이 다 만들어진 이후에야 완제품들의 신호를 다시 통과시킬 것이다. 이를 통해 완제품들보다 신호 우선순위가 밀리는 중간 재료들을 완제품들보다 먼저 만드는 것이 가능해진다.
두번째 조건은 다이소가 작동 중일 때도 B라는 신호를 출력하는 설정이었는데, 저 설정 때문에 물품이 만들어지는 동안에도 신호가 차단되었다가 '다이소에서 물품이 다 만들어진 이후에야' 신호가 다시 전달되게 된다. 따라서 추가된 회로로 인해 신호 전달이 몇 틱 지연되더라도 '다이소에서 물품이 다 만들어진 이후에도 재료가 모자란지' 회로가 판단할 수 있는 충분한 여유가 주어지게 된다.
마지막으로 위에 설치한 수량 비교기끼리 회로로 연결해주고, 추가로 재료용 일정 신호기는 조건에 관계없이 무조건 처음 수량 비교기에 신호가 들어가도록 빨간선으로 연결해주면 재료까지 만들어주는 다이소가 완성된다. 한 번 결과를 보자
일단 작동은 잘 되는 것 같다. 톱니바퀴와 구리선 녹칩 빨칩 등이 전혀 공급되지 않는데도 다이소가 알아서 필요한 중간재료를 우선적으로 생산한 뒤 재료가 다 만들어진 후에 완제품들을 생산하는 모습이다. 저렇게 다이소 내부에서 재료의 생산/공급이 가능해진다면 외부에서 공급해줘야 하는 재료들의 종류가 확 줄어들 테니 재료 공급 경로를 훨씬 간소화할 수 있을 것이다.
다만 문제는, 시간이 너무 오래 걸린다. 물론 이 방식이 조립기계 딱 하나만으로 수많은 물품을 생산하는 방식이라 기본적으로 시간이 오래 걸리는 방식이긴 한데, 그걸 감안하더라도 시간이 엄청 오래 걸린다. 아무리 그래도 이건 아니다 싶을 만큼 과하게 오래 걸린다.
왜냐하면 사진에 표시한 '상자에서 투입하는 투입기'에는 회로로 필터를 설정하는 기능이 꺼져있기 때문인데, 다른 투입기들은 재료들이 다이소 안에 필요한 만큼 넣어졌을 경우 필터 제어를 통해 물품 투입을 막을 수 있지만, 저 투입기는 '상자들'과 회로로 연결되어 있다보니 만약 필터 설정을 켜버리면 상자 안의 재료들이 회로선을 타고 신호가 섞여들어가 투입기가 먹통이 될 수 있기 때문에 필터 설정을 꺼둬야 한다.
그래서 저 투입기는 수량 조절 기능이 꺼진 상태로 손에 잡히는 재료들을 막 때려넣어버리는데, 문제는 대부분의 재료들을 다이소에서 만들다보니 대부분의 재료들이 저 투입기를 통해 필요 이상으로 쏟아부어져서 재료를 넣는데도 한참 걸리고 재료를 빼는데도 한참 걸리게 되어 시간이 오래 걸리게 되는 것이다. 따라서 실용적인 수준까지 생산 시간을 줄이기 위해서는 회로로 필터 설정을 하는 기능을 켜야만 하고, 그러기 위해선 상자의 신호가 투입기와 합쳐지는 문제를 해결해야 한다.
그럼 그걸 어떻게 하느냐? 별 거 없다. 그냥 합선 방지용 일방 통행기 하나만 추가해주면 땡이다.
기존에는 초록선 딱 한 줄만으로 투입기와 상자들을 다 합쳐서 연결했기 때문에 상자 안의 물건들 신호가 투입기에 섞여들어간 건데, 그러면 그냥 선을 한 줄 더 써주면 된다. 기존에 초록선이 연결된 부분에는 저 투입기만 연결해주고 나머지 상자들 신호는 일방 통행기 하나 더 만들어서 연결해주면 신호 합선 문제는 해결된다. 그리고 출력부를 각각 이어주면 문제 해결이다.
그 다음 저 투입기의 '필터 설정'을 켜주면 이제 저 투입기도 필요한 만큼만 재료를 투입하는 수량 조절 기능이 활성화된다. 저렇게 설정을 마치고 다시 다이소를 돌려보면 이전보다 훨씬 빠르게 물건들이 만들어지게 된다. 딱히 달라진 건 없고 그냥 만드는 시간만 단축되는 거라 별도로 움짤은 첨부 안 하는데, 그냥 저렇게 하면 더 잘 만들어진다는 것만 알아두면 된다.
아 그리고 혹시 전설 조립기계에 전설 속도모듈을 박고 전설 투입기로 투입하려고 하는 사람들은 '제작법 완료 읽기'도 작동 여부와 동일한 A신호로 맞추기를 바란다. 전설 품질들로 도배를 해버리면 간단한 부품은 만드는데 0.03초 이하로 걸려서 작동 신호가 딱 한 틱밖에 전달되지 않아 회로가 제대로 인식을 못한다. 제작이 완료됐을 때도 동일한 신호를 보내게 해서 신호 전달 시간을 1틱이라도 연장시켜야 오류가 덜 난다.
3-2. 하나씩만 넣으면 감질난다
기존에는 다이소 안에 필요한 재료를 딱 필요한 만큼만 넣기 위해 투입기의 묶음 크기 재정의를 1로 설정하였다. 이렇게 하면 별도로 복잡한 회로를 설정할 필요 없이 기본 설정만으로 재료 과투입 문제를 해결할 수 있게 되지만, 그만큼 재료를 다 넣을 때까지 시간이 불필요하게 더 오래 걸리게 된다. 굳이 무조건 하나씩만 넣지 말고 한 번에 집는 양을 조절해가면서 여러 개를 집어넣도록 해서 만드는 속도가 좀 더 빨라지게 해보자.
가장 간단한 방법으로는 벨트 한 줄에 아이템을 반 줄씩 두 종류 올리지 말고 오로지 한 종류만 올린 뒤 묶음 크기 신호를 해당 아이템으로 설정하는 방법이 있다. 재료 신호를 별도로 다른 신호로 변환해주거나 할 필요 없이 그냥 그 재료 신호 자체를 그대로 묶음 크기로 설정해버리면 '필요한 수량 = 묶음 크기'가 되어서 필요한 만큼 투입기가 팍팍 집어갈 것이다. 본인이 다이소로 만들려고 하는 품목들 중에서 가장 많이 필요한 재료 한두개 정도는 한 줄에 꽉 채워 보낸 뒤 초록 투입기로 팍팍 넣어버리면 만드는 속도가 훨씬 빨라질 것이다.
그러나 이런저런 이유로 한 줄을 꽉 채우지 못하고 반 줄씩 올려서 보낼 수밖에 없는 물품들이 나올 수도 있을 것이다. 그런 경우에는 벨트에 올라간 재료 둘 다 한 번에 많이 쓰이는 재료들이 아니라면 둘 중 우선순위가 높은 재료를 묶음 크기로 설정하고, 둘 다 빠르게 팍팍 집어넣어야 하는 재료들이라면 둘 중 우선순위가 낮은 재료를 묶음 크기로 설정하면 된다.
예를 들어 강철판 5개와 녹칩 15개(+구리판 5개)가 재료로 들어가는 태양 전지판을 만드는 경우를 생각해보자. 아이템창을 열어 '재료'탭을 확인해보면 강철판과 녹칩 중 강철판이 더 앞에 있으므로 강철판이 동시신호에서 우선순위를 가진다. 그리고 강철판이든 녹칩이든 전부 필요한 만큼 투입돼서 묶음 크기 신호가 0이 되더라도 투입기는 여전히 최소 1개의 물건을 집을 수 있다는 점 알아두자.
강철판을 묶음 크기로 설정할 경우 처음 강철판을 집을 때는 정확하게 5개를 집어 조립기 안에 넣을 것이다. 그 후 강철판이 전부 채워졌으므로 강철판 신호는 0이 될 것이고, 두번째로 녹칩을 집을 때는 1개씩만 집어 조립기에 넣을 것이다. 재료 투입 속도가 느리긴 하겠지만 필요 이상으로 재료가 과투입되는 경우는 없을 것이고, 어쨌든 그냥 묶음 크기 신호를 1로 고정해서 쓰는 것보다는 빠를 것이다.
녹칩을 묶음 크기로 설정할 경우 처음 강철판을 집을 때 필요한 수량보다 많은 15개가 묶음 크기로 설정될 것이다. 파란 투입기를 쓴다면 4개+4개 두 번 투입해서 총 8개의 강철판이 투입될 거고 녹색 투입기를 쓴다면 한 번에 12개가 투입될 것이다. 그리고 그 후에 녹칩은 15개 딱 맞춰서 투입될 거고. 만드는 속도는 빨라지겠지만 과투입된 강철판이 점점 상자 안에 불필요하게 쌓이게 될 것이다. 정확성과 속도 중 어느 쪽을 택할 지는 각자 공장 상황과 취향을 고려해서 알아서 선택하면 된다.
만약 벨트가 아니라 로봇 물류를 이용해서 상자 하나로 모든 재료들을 공급하려고 한다면 이렇게 하면 된다.
우선 물류 상자와 수량 비교기를 연결한 뒤 '각각' > 0 = '각각'의 조건을 입력하고 1의 값을 출력하도록 설정해준다. 즉, '물품이 하나라도 들어있으면 그 물품의 신호를 출력하도록' 설정한 것이다. 언뜻보면 여태까지 설치한 일방 통행기와 같은 역할을 하는 것처럼 보이겠지만, 수량 비교기를 쓴 이유는 값을 그대로 출력해주는 게 아니라 얼마나 많은 수량이 들어있든 1이라는 고정된 값을 출력해줄 필요가 있기 때문에 산술 연산기가 아닌 수량 비교기를 사용한 것이다. 출력 값에서 1을 체크하는 걸 잊지 말자.
그리고 수량 비교기를 하나 더 추가해준 뒤 사진처럼 설정해준다. 상자에서 빨간선으로 나오는 신호는 전부 1이라는 크기로 고정되는데, 1보다 같거나 크다는 조건은 즉 0만 아니면 된다는 뜻이므로 저 조건은 '필요한 재료 중에 상자 안에 들어있는 물품과 같은 물품이 있으면' 저 초록색 신호를 출력하라는 뜻과 같아진다.
저 초록색 기호는 와일드카드 '아무거나'라는 기호로 입력된 값들 중에서 '첫번째 신호'만 내보내는 기능을 한다. 여기서 '첫번째 신호'라는 건 신호들 중 '우선순위가 가장 높은' 신호를 말하는 것이다. 투입기가 상자에서 물건을 집을 때도 상자에 있는 물건들 중 우선 순위가 가장 높은 물건부터 집어서 넣으므로 저 녹색 신호를 쓰면 '투입기가 집으려는 물품의 신호'만 뽑아낼 수 있게 된다.
이 때 물류 상자에 들어있는 재료의 종류는 한두가지 수준이 아닐 것이므로 벨트 때처럼 재료 신호를 그대로 쓰지 않고 이번엔 별도 신호로 변환을 해줘야 한다. 여기서는 산술 연산기를 사용해서 S라는 신호로 변환해주겠다. 그리고 투입기와 회로로 연결해준 뒤 묶음 크기를 S로 설정하면 3가지 이상의 재료들도 맞춤형으로 집어드는 수량 조절 장치가 완성된다.
참고로 파란색으로 표시한 저 투입기와 상자도 동일한 방식으로 묶음 크기를 설정할 수 있으니 원하는 사람은 똑같이 따라하면 된다.
3-3. SR래치? 뭐임 그게
(어우 정신 사납다)
지금까지 만든 다이소는 상자 안에 들어있는 물품들이 설정한 수량보다 단 1개라도 부족할 경우 그 즉시 해당 물품을 만들도록 신호를 보내는 방식이었다. 이렇게 해도 작동 자체는 잘 되긴 하지만, 그래도 계속 이거 만들었다 저거 만들었다 하면서 만드는 물품을 바꾸는 것보다는 특정 물품을 일정 수량 이상 만들면 어느 정도 재고가 줄어들 때까지는 가만히 있다가 일정 수량 이하로 떨어진 이후에나 다시 생산을 재개하도록 만들고 싶은 사람도 있을 것이다. 그런 사람들을 위해 해당 방식을 적용하는 방법도 알아보자.
우선 해당 방식을 설명하려면 이것저것 조금씩 만드는 것 보다는 어느 정도 큰 수량을 만들 필요가 있으므로 투입기 4종류를 각 500개씩 만들도록 일정 신호기를 수정해주겠다. 기존 방식대로라면 저 투입기들이 500개씩 만들어진 이후 단 하나라도 상자에서 빠져나가면 즉시 다이소가 해당 투입기를 만들려고 하겠지만, 이 글을 읽고 있는 팩붕이들 중 한 명이 이런 생각을 했다고 가정해보자.
"나는 일단 각 투입기들을 먼저 500개씩 만들고 싶어. 그러나 투입기들이 다 만들어진 이후에는 어느 정도 투입기들이 사용되어도 다이소가 작동하지 않았으면 좋겠어.
노란 투입기는 다른 투입기의 재료로 많이 쓰이니까 400개 정도까지는 쓰여도 다이소가 반응하지 않았으면 좋겠어. 빨간 투입기는 재고가 좀 있어야 할 것 같으니까 300개쯤 쓰인 이후에 다시 제작을 했으면 해. 파란 투입기는 한 번에 쓰는 양이 많으니까 200개만 쓰여도 다시 채워졌으면 좋겠고, 초록 투입기는 가장 많이 사용하니까 쓰는 즉시 채워지도록 100개만 쓰여도 제작을 시작하게 만들고 싶어."
자, 각 투입기마다 각자 다른 수량만큼 쓰였을 때 다이소가 작동되도록 만들고 싶다고 한다. 일괄적으로 n개 이하로 떨어졌을 때도 아니고 각 투입기 별로 제작이 시작되는 기준선이 다 다르게 만들도록 회로를 짜야 한다. 노란 투입기는 400개, 빨간 투입기는 300개, 파란 투입기는 200개, 초록 투입기는 100개가 기준 수량보다 부족하면 다이소가 해당 투입기를 만들도록 설정하는 걸 목표로 하겠다.
우선 수량 비교기를 하나 추가해준 뒤 위와 같이 설정해준다. 기존에 만들었던 수량 비교기는 '기준 수량보다 만들어진 물품이 적으면' 신호를 보내도록 했지만 이번 수량 비교기는 정반대로 '기준 수량만큼 물품이 충분히 만들어졌으면' 신호를 보내도록 설정해준다.
그 옆에 일정 신호기를 추가하고 방금 가정했던 투입기 사용 수량들을 입력해준다. 산술 연산기도 추가한 뒤 '각각' * '각각' = '각각'으로 설정한다. 이번에도 R과 G를 하나씩만 체크하되 곱하기는 순서가 상관없으니 R과 G순서는 아무렇게나 해도 된다.
곱하는 것도 '각각', 곱해지는 것도 '각각'인 '각각' X '각각' 연산은 출력이 인식되지 않는 신호는 크기를 0으로 간주하고 계산한다. 예를 들어 녹색 선에서 A = 3, B = 5, C = 7, D = 9라는 신호가 들어오고 빨간 선에서 C = 1이라는 신호만 들어온다고 가정하자. 둘을 '각각' 연산으로 곱할 경우 빨간 선에서의 신호는 A = 0, B = 0, C = 1, D = 0이라는 신호로 인식한 뒤 녹색 선에서의 각 신호들과 곱해서 C = 7이라는 신호만 남겨놓는다.
따라서 사진에서의 저 계산식은 '일정 신호기의 신호들 중 충분히 만들어진 물품의 신호만 통과시켜라'라는 뜻과 동일하다. 이 방식으로 기준 수량 이상으로 만들어진 투입기들만 신호를 통과시킬 수 있게 된다.
그리고 수량 비교기의 출력부를 상자들과 연결시키면 회로 수정 끝이다.
......농담 아니고, 진짜 저게 끝이다. 진짜로 저걸로 회로 수정이 다 완료된 거다.
원리는 이러하다. 여태까지는 합선이 생기지 않도록 초록선 빨간선 계속 구분해서 쓰고 합선이 생길 것 같으면 일방 통행기를 써서 신호를 나눠주고 그랬는데, 이번에는 반대로 의도적으로 신호를 합선시켜서 회로에 가짜 신호를 더해준 것이다.
투입기가 설정된 수량만큼 다 만들어진 순간, 일정 신호기의 신호가 통과되면서 해당 신호들이 상자 안의 물건들 신호와 더해져서 실제 물량보다 더 큰 수량을 회로에 전달한다. 이렇게 되면 실제 물건이 몇 개 빠져나가더라도 회로는 일정 신호기와 합쳐진 물량을 전달받고 여전히 물량이 충분하다고 판단해서 제작을 보류하다가, 일정 신호기로도 커버가 안 될 만큼 수량이 크게 줄어들면 그제서야 정상 신호를 전달받고 물건 제작을 시작하게 되는 것이다.
처음 조건을 들었을 땐 굉장히 복잡한 회로가 나올 줄 알았지만, 실제로는 회로 3개 추가하고 땡인 생각보다 간단한 회로가 만들어졌다. 이렇게 만들면 정신 사납게 계속 제작 물품이 바뀌는 일 없이 어느 정도 꾸준하게 다이소가 물품을 만들어 줄 것이다.
4. 생산성 보너스는 어쩔 수 없지
여태까지는 생산성 보너스가 전혀 없는 기본 조립기계로 다이소를 만들어봤는데, 이 방식은 건물 자체에 생산성 보너스가 포함된 각 행성 특산 건물들에는 최적화가 되어 있지 않은 방식이다. 주조소/바이오 챔버/전자기 공장은 기본 생산성 +50% 덕분에 두 번 연속으로 만들면 한 번을 보너스로 제공하는데, 여태까지 소개한 방식은 기본적으로 '연속 생산'이 고려되지 않는 방식이라 생산성 보너스를 놓칠 수도 있게 된다.
물론 방금 소개한 SR래치 비스무리한 방법을 쓴 합선 방식으로 연속 생산을 하면 어느 정도 보너스를 챙길 수는 있는데, 이것도 특산 건물들에 완벽하게 적용된 방식은 아니다. 이왕 여기까지 온 거 생산성 보너스를 완벽하게 챙기는 방법까지 알아가야 하지 않겠는가. 마지막으로 특산 건물들에 최적화된 다이소까지 소개할 테니 여기까지만 더 읽어보도록 하자.
기본적인 골자는 기존 다이소와 동일하다. 건물 두 개 붙여주기, 상자랑 건물 회로로 분리하기, 일정 신호기랑 '각각'으로 비교하기 등등등. 건물들과 투입기들 설정도 기존과 동일하게 맞춰주면 된다.
다만 여기서는 물품이 만들어질 때 생산성 보너스를 받았는지 여부까지 확인해야 하므로 '제작법 완료 읽기'를 켜두도록 하자. 생산성 보너스를 완벽하게 받았다면 기본 생산 물품과 보너스 생산 물품이 합쳐져서 저 신호가 2로 나타나게 되는데 그 값을 회로로 감지하면 물품을 더 만들어야 하는지 다른 걸로 바꿔도 되는지 판단할 수 있게 된다.
이제 건물 위에 수량 비교기를 하나 설치한 뒤 입력과 출력을 연결해 메모리 셀로 만들어준다. 메모리 셀이 뭐였는지 기억 안 난다면 2번 문단을 다시 읽고 오자. 유지 조건은 제작 완료 신호가 2보다 작을 때로 설정해준다. 이렇게 하면 제작 신호가 1만 들어왔을 때, 즉 '아직 생산성 보너스가 남아있을 때'는 해당 값을 유지시키다가 '보너스를 완전히 받아서' 신호가 2로 들어왔을 때 메모리를 초기화 시킨다.
이 때 R과 G의 체크 여부를 신경써서 봐주도록 하자. 입력값에서는 '공장에 연결된' 선에서만 신호값 2 이상이 들어왔을 때 메모리가 초기화되도록 다른 선을 체크 해제 시켜주고, 출력은 빨간선 초록선 모두 출력되도록 해주면 된다.
해당 메모리 셀을 '각각' 비교를 하던 비교기에 연결해준 뒤 조건문에 '완료 신호가 0일 때'를 추가해준다. 이렇게 하면 메모리 셀에 신호가 남아있는 동안에는 신호를 중단시켰다가 생산성 보너스를 완전히 받고 나면 다시 신호를 보내주게 된다.
그리고 출력부에서 출력값을 1이 아니라 10000을 보내주게 설정했다는 것도 잘 확인하자. 여기서는 10000을 출력하게 설정했는데, 반드시 저 값이어야 할 필요는 없고 십만이든 백만이든 99999999든 상관없이 '게임 내에서는 절대 자연적으로 도달하지 못할 수준의 커다란 수'를 입력해주면 된다. 뜬금없이 왜 저딴 이상한 숫자를 써넣는 건가 싶을 텐데, 이 글을 쓰기 위해 정상 동작 여부를 확인하는 과정에서 어떻게든 틱 지연을 줄이기 위해 존나게 똥꼬쇼를 해댄 결과물이라고 이해해주길 바란다. 결과는 간단하지만 과정은 존나 힘들었다.
마지막으로 수량 비교기를 하나 추가해서 메모리 셀로 만든 뒤 옆에 있는 3개의 조합기의 출력부를 모두 연결한 회로선을 입력부에 연결하고 사진과 같이 설정해주면 회로 완성이다. 이 메모리 셀 역시 생산성 보너스가 남아있는 동안에는 값을 유지하다가 보너스를 완전히 받으면 초기화되도록 설정했다.
아까 10000을 왜 써넣었는지 궁금했을 텐데, 회로에 들어오는 수많은 신호들 중 재료들은 많아봐야 100개 이하일 거고 완성품들도 아무리 많이 만들었다고 한들 상자 하나에 10000개 이상을 채워넣지는 못할 테니 오로지 회로에서 나오는 값들만 선별하기 위해 저렇게 큰 숫자를 넣은 거다. 저렇게 하면 중간에 온갖 신호들이 섞여들어오더라도 다 걸러내고 기존의 10000짜리 신호만 계속 유지할 수 있다.
이제 출력부를 각 공장에 연결하면 특산 건물용 다이소 완성이다. 긴 말 필요 없이 바로 결과를 보자.
(우워어어어어어어어어 4분의 1배소오오오오오오오오오옥)
아주 좋다. 의도한 대로 잘 작동하는 모습이다. 기존 다이소가 작동하던 방식과 비슷하게 물품이 만들어질 때마다 생산 물품을 바꾸는 건 동일하지만, 생산성 보너스가 남아있는 동안에는 생산을 유지하다가 보너스를 다 받은 다음에서야 생산 물품을 바꾸는 방식으로 생산성 보너스를 전부 챙기며 물품을 만드는 걸 확인할 수 있다. 이것으로 골치 아픈 회로들을 사용한 압축형 다이소 설명을 마치며, 여기까지 읽은 팩붕이 니들에게 수고했다는 박수를 보낸다. 아 물론 제일 수고한 건 나니까 나를 위한 박수도 쳐줄 거다. 짝짝짝짝짝.
5. 마치며
원래 하루 이틀 정도만 써서 간단하게 올리려고 했는데 어찌어찌하다보니 한참 동안 글 쓰느라 머리 싸매고 있더라. 잘만 하면 게임 본편 플레이한 시간보다 팩갤에 글 쓰느라 소비한 시간이 더 많아질수도 있겠다는 생각이 들었다. 아직 더워지려면 한참 남았는데 뜬금없이 등골을 오싹하게 만드는 팩서운 이야기였다. ㅎㄷㄷ
처음 다이소 글을 썼을 때는 이 이상 더 발전할 수 없을 거라고 생각했을 만큼 엄청 훌륭하고 뿌듯하게 느껴졌었는데, 시간이 가면 갈수록 당시 글을 볼 때마다 내가 왜 저따위 글을 써놓고 뿌듯해하고 있었을까 싶은 생각이 들더라. 계속 부족한 부분이 눈에 밟히고 뭔가 수정하고 싶은데도 한 번 글을 쓸 때마다 시간이 한참 걸리다보니 가벼운 마음으로는 수정할 엄두가 안 났었는데, 이번에 큰맘 먹고 한 번 업데이트를 해봤다. 물론 이 글도 나중에 다시 보게 되면 내가 왜 이따위 글을 썼을까 하는 생각을 하며 부족한 부분이 눈에 밟히겠지만, 그래도 지금 당장은 뿌듯하게 느껴지니 이걸로 만족하련다.
온갖 회로들을 써가며 공장을 돌리는 이번 글을 보고 이 게임은 이런 골치 아픈 작업을 해야 진행이 가능한 건가 오해하는 뉴비들이 있을까봐 확실하게 말하는데, 회로는 그냥 사이드 기능 같은 거고 회로 따위 전혀 안 쓰고도 게임 즐기고 엔딩 보는데 아무런 문제 없다. 이 글은 공략글이 아니라 그냥 자기만족용으로 업데이트 한 뻘글이니 부디 게임하는데 부담갖지 말고 자기가 즐기기 편한대로 게임하기 바란다. 어떤 방식이든 자기가 즐기면서 할 수 있는 방식이 가장 좋은 공략 방식이니, 그냥 회로를 쓰면 이런 방식도 가능하구나 하는 정도로 넘어가고 너무 신경쓰지는 말길 바란다. 다들 각자의 방식대로 즐거운 팩토리오 해라.
꼭 다이소 아니더라도 조합기 자체의 원리랑 시스템, 시행착오가 다들어있네 공지감임
우주선 메인허브에 다이소 차릴때는 진짜 의미있는 기능이긴 함 돌 자체수급이 안되니까 문제라서 긇지...
이런 생각하는 과정이 담겨있는 글이 최고로 좋은 글이더라. 몇달 뒤에 와보면 만든사람도 어떻게 돌아가는지 까먹는데 글로 남겨두면 다시 배우는 과정이 훨 빨라지기도 하고ㅋㅋ 기능도 이것저것 다 넣었는데 조합기 7개로 압축되는게 제일 신기함. 회로 뺴고봐도 이정도 분량 쓰고 스샷 편집하고 하는데 열시간은 들어갔을텐데 대단해
작동 방식상 한 종류의 아이템을 두 개 이상의 투입기가 잡으면 과투입된거 빼는데 시간 잡아먹어서 오히려 느려질수도 있을 거 같음. 여러 투입기에 서로 다른 신호를 주는 식으로 통제를 하면? 뭐 주조소로 벨트만드는 레시피다, 그러면 화물차같은데 미리 원자재 넣어두고 거기 붙은 투입기가 전부다 철판이랑 벨트랑만 집으면 재료 넣는속도를 단축할수도 있지 않을까. 생산모듈 적용되는 톱니나 녹칩같은 아이템은 효과 받게 해서 재료량 시간을 더 절약할 수도 있을거고. 지금 게임 켜서 테스트해보니 생산 적용 안되는 레시피로 바꾸면 모듈이 그냥 출력칸으로 빠져버리고, 이렇게 빠진 모듈은 투입기로 뺄수는 있지만 다시 넣을수는 없더라. 결국 생산 적용되는 레시피용이랑 불가능한 레시피랑 생산건물을 분리해야하는데
이게 기술적으로는 얼마나 어려울지 모르겠음.
또 17번 사진에서 우선순위 때문에 미리 쌓아두고 싶은 재료들은 직접 입력해야 했는데 위상정렬 쓰면 이걸 자동으로 하게 만들수도 있는거 같더라고.
http://redd.it/1qytqwg
https://www.youtube.com/shorts/UgU-m8qojts
바닐라에서는
사실 그냥 봇다이소 만들면 되는 일이지만 오토몰은 모드 플레이할때 빛을 보는거같음. 다만 거기에 그대로 적용할라 치면 건물 수백개씩 다 자동화해두기 힘들고 우선순위 지정하기도 힘드니 뭐 이런 생각 하게 되는듯. 재료 수천개씩 먹는 건물들 만들때도 철판 그거 투입기로 네개씩 넣고있으면 한참 걸릴거고
@고속도로 그... 위상 정렬이 왜 여기서 나옵니까?
@고속도로 그... 회로 한두 개로 재현 가능한 거 맞습니까?
논문을써놨어
아 완벽히 이해했어 사실안읽음
글 분량 와우
압축다이소 공략 끝판왕이네 쩐다
dlc 초기에 화물차 써서 비슷하게 만든적있었는데
청사진좀