[시리즈] 팩토리오 스피드런
· 스피드런 가이드 - 회로 트릭



스런섭에서 가장 많이 하는 질문이 흰팩과 wall ship의 회로인데 지난번 회로트릭으로는 설명이 충분하지 않은거같아서 2편을 준비했다.


1편을 잘 보고 왔다면 -2^31-5 라는 값은 일정신호 조합기에서 2147483643 라고 계산되고 오버플로값인 2147483648에서 5를 뺀값으로

해당 오브젝트가 5개 이상이라면 -2^31 즉 -2147483648로 세팅이 되기 때문에 신호는 "올바르지 않은 신호"로 처리하여 개수를 판별할 수 있게 된다


실제로 AntiElitz 영상의 일정신호조합기에는


철광석: -2^31 - 77

얼음: -2^31 - 11

탄소: -2^31 - 133


을 입력하고 


각각의 소행성에


철 소행성: -2^30-5

탄소 소행성: -2^30-5

얼음 소행성: -2^30-11


을 설정하게 되는데 오늘은 왜 2^30 을 세팅하는지에 대한 간단한 실험과 결과값을 알아가 보자


위키에 아주 자세히 나와 있는데 들어가서 읽으라고 하면 읽지 않을테니 대충 붙여넣겠다



간단하게 초록색 선과 빨강색 선을 두개다 사용하면 오브젝트는 각 신호를 합해서 처리해버린다


2^30 은 2^31 을 2로 나눈 값이므로 간단하게 2^30을 한번 더 더하면 2^31이 된다

실제로 그런지 확인해보자


아 지금부터 보여주는 수량 비교 조합기는 합산된 정확한 값을 보기 위해서만 연결한 것임을 먼저 알림






실제로는 이렇게 오버플로 트릭으로 바뀌면서 뒤에 4자리가 3628 이면 3648 - 3628 이므로 총 20개의 얼음 소행성을 세팅 할 것이다



팩토리오 인벤토리 가로줄은 10칸이므로 총 20개다. 각각 회로를 연결해주면




이렇게 output 에는 신호가 사라진 것을 볼 수가 있다


AntiElitz 의 영상을 잘 보면 초록 네트워크와 빨강 네트워크를 같이 입력하는 부분이 있다


---


그럼 대체 왜 이런짓을 하는지를 알아보자


가장 큰 이유는 분쇄기 레시피 때문이다.

이거는 말로만 설명하면 어렵기 때문에 각 스크린샷과 함께 보자


테스트를 하기 위해서 일정 신호 조합기에서 -2^31-5를 얼음 소행성, 얼음으로 세팅한다


이 상태로 각각 수집기와 분쇄기에 연결을 해보자

분쇄기는 조합법 설정, 수집기에는 필터설정, 내용물읽기, 수집기의 손포함을 체크한다




지금까지는 문제가 없는것 처럼 보인다. 플랫폼에는 아무것도 없기 때문에.


여기서 나올수 있는 조건을 보면


얼음이 5개, 소행성 0개 라면 수집기는 소행성이 세팅되어야 한다

얼음이 0개, 소행성 5개 라면 분쇄기는 얼음이 세팅되어야 한다

얼음이 5개, 소행성 5개 라면 아무것도 세팅이 되면 안된다

얼음이 1개, 소행성 1개 라면 수집기는 소행성이 세팅되어야 하고 분쇄기도 얼음이 세팅되어야 한다




얼음이 5개가 있다. 우리의 기대값은 분쇄기는 얼음이 해제되고 수집기는 소행성을 세팅해야한다.




엥?? 왜 이렇게 된걸까. 이럴 때 분쇄기가 어떤 신호를 받고 있는지 보면 된다




얼음은 5개로 오버플로우가 되었지만 소행성은 오버플로우가 되지 않았다.


여기서 분쇄기와 신호 -> 조합법 세팅의 위키를 좀 보고 가자

당연하게도 읽지 않을것을 알기에 간단하게 정리하면


조합법 선택

결과 값이 신호와 같은 값을 선택


산화물 소행성 분해는 얼음 + 산화물 소행성 두 가지이기 때문에

얼음 신호가 와도 소행성 분해가 나오고

산화물 소행성 신호가 와도 산화물 소행성 분해가 나온다


우선순위

분쇄 > 재처리 > 고급 분쇄

금속 > 탄소 > 산화물


또 간단한 팁을 더 주자면

위와 같은 우선순위로 되어 있기 때문에 소행성 재처리를 신호기로만 하고싶으면 다른 방법을 써야한다


어쨋든 우리의 기존 오버플로우 일정신호 조합기로는 위에서 말한 4가지의 조건을 갖게 할 수가 없다


우리는 세 가지를 배웠다.


1. 정수 오버플로우

2. 네트워크의 신호 합산

3. 레시피 설정의 우선순위 및 선택 방법 


여기서 하나만 더 추가하자

하나의 오브젝트는 각 네트워크의 합산 신호를 출력 하지만 합산 전 네트워크의 신호는 개별로 받아들인다


무슨 말이냐면


빨강에서 -5가 오고

초록에서 -5가 오면


연결된 오브젝트는 각각의 신호를 개별 신호로 취급하여 -5, -5 를 "올바르지 않은 신호"로 판단한다

하지만 출력을 할 때는 -5-5 를 계산한 -10을 신호로 출력한다는 의미이다. 여기다가 오버플로우를 적용 한다면?


신호 조합기 - 분쇄기 : 빨강 네트워크 (-2^30-5 으로 소행성 레시피는 잡히지 않고 얼음 레시피로만 잡는다)

신호 조합기 - 수집기 : 빨강 + 초록 네트워크 (-2^30-5 + -2^30-5 이므로 -2^31-10 이다)


지금 우리의 문제는 분쇄기가 소행성을 양수로 잡아서 소행성 조합법이 바뀌지 않는다.

여기서 위의 트릭을 사용해보자


간단하게 -2^30-5 로 잡고 빨강선 + 초록선으로 수집기에 연결하고

빨강선만 분쇄기에 연결한다면?




짜잔. 인벤토리의 얼음 5개는 그대로다. 수집기가 얼음 소행성을 세팅했고 분쇄기는 조합법이 사라졌다.




실제로 -2^30 과 -2^31 이 같이 잡히는걸 볼 수 있다.




수집기는 -2^30 이 두개가 잡혔고 이걸 더하면 오버 플로우가 나게 된다. 이걸 가시화 시키면




11개의 소행성을 플랫폼에 넣어주고 수량 비교 조합기로 실제 값을 확인해보자




11개이므로 우리가 기대하는 -2^30-5 + -2^30-5 값인 -2^31-10 값이므로 11개의 소행성을 인벤토리에 넣었으므로 오버플로우가 나면서 set off 가 되는걸 확인 할 수가 있다.




---


정리를 해보자.


1. 정수 오버플로우 

- 실제 복사해서 넣는 값은 -2^31-5 형태 언더플로 방식으로


2. 네트워크의 신호 합산

- 빨강, 초록 네트워크는 신호를 합산한다


3. 레시피 설정의 우선순위 및 선택 방법

- 분쇄기는 받은 신호의 결과 값을 조합법으로 세팅한다


이걸 응용해서 흰팩을 만들어보면





이렇게 나온다.


플랫폼 - 신호기 - 파쇄기 - 수집기 : 빨강 네트워크

신호기 - 수집기 : 초록 네트워크


이걸 wall ship에서 쓰게 되면




요렇게 앞 대가리에 사용되게 된다


끝.