다들 잘 알다시피, 기본 원유 처리는 석유 가스만 나와서 뉴비들도 별 문제 없이 넘길 수 있다.






하지만 고급 원유 처리가 열리면 갑자기 벽을 느끼게 된다. 바로 바닐라에서 최초로 등장하는 부산물때문.






100의 원유를 동일하게 받아 석유 가스를 10이나 더 주고, 여기에 중유와 경유까지 덤으로 얹어준다. 하지만 문제는...





막힌다. 석유 가스, 경유, 중유를 전부 다 소비해야 석유 가스가 생산이 된다는 뜻이다.

그래서 바닐라에서는 고급 원유 정제와 더불어 두 개의 제작법을 추가로 제공한다.





중유를 경유로, 경유를 석유 가스로 변환해준다. 즉 남는 경유와 중유는 여기다 써먹으라는거다.

하지만 무작정 모든 경유와 중유를 분해하면 그대로 ㅈ된다.


사유는 아래의 두 제작법때문.




보다시피, 로봇 프레임 제작 및 전기 엔진 유닛에 필수적인 윤활유는 중유로부터, 로켓 발사에 필수적인 로켓 연료는 경유로부터 만들어진다.

자, 이제 짱구를 굴려보자.


우선 중유는 반드시 윤활유를 만들고, 남은 것을 경유로 변환해준다.

수도코드로 표현하면 다음과 같다.


if (윤활유 < Threshold)

중유 -> 윤활유

else

중유 -> 경유


다음, 경유는 로켓 연료를 만들 백업분을 남기고 전부 석유 가스로 바꾼다.


if (경유 > Threshold)

경유 - > 석유 가스

else

continue;


자, 이제 이걸 회로로 구현해보자.






다음과 같이 두 개의 펌프를 중유 탱크에 파이프 및 회로로 연결하고, 각각 윤활유와 중유 크래킹 공정으로 빼준다.

여기서 1번이 윤활유, 2번이 크래킹이다.





1번 펌프는 윤활유가 일정 수치보다 적으면 펌프가 활성화되게끔 한다.



if (윤활유 < Threshold)

중유 -> 윤활유

else

중유 -> 경유





다음, 2번 펌프는 반대로 윤활유가 일정 수치를 넘으면 동작하게 설정한다.


if (윤활유 < Threshold)

중유 -> 윤활유

else

중유 -> 경유


중유는 놀랍게도 이걸로 끝이다.





자, 보이는가? 윤활유가 설정한 수치만큼 쌓이자 1번 펌프는 동작을 중단한다.






반대로 2번 펌프는 동작을 시작하여, 중유 크래킹 공정이 돌아가고 있다.



그럼 다음, 경유를 살펴보자.


잊어버렸을테니 다시 의사 코드를 복기해보면...


if (경유 > Threshold)

경유 - > 석유 가스

else

continue;


중유와 다르게, 경유는 일정량을 남겨놓는 것이 목적이다.

그래서 펌프는 하나만 있으면 된다.


if (경유 > Threshold)

경유 - > 석유 가스






이게 끝이다.


하지만... 문제가 하나 더 있다.

바로 우리가 석유 가스를 처리하는 공정이 없다는 것.

이게 뭔 개소린가 싶을텐데, 종종 경유와 윤활유를 엄청 땡겨쓰다보면 석유 가스가 차서 생산이 막히는 경우가 있다.






석유 가스가 꽉 차서 경유와 중유가 없다. 크아악


자, 이제 여기서 쓸 제작법은 바로 석유 가스로 고체 연료 만들기이다.





포브스 선정 석유 가스를 제일 비효율적으로 사용하는 제작법이다.



이걸로 석유 가스를 낭비한 뒤 만들어진 고체 연료는 보일러, 기차 등 쑤셔박으면 된다.


그럼 이제 어떻게 할 지 생각해보자.


1. 윤활유나 경유가 부족하고

2. 석유 가스가 꽉 찼을 경우

에 한해 동작시켜야 한다.


의사 코드를 다시 보자.


if (석유 가스 > maxThreshold && (경유 < minThreshold || 윤활유 < minThreshold))

석유 가스 -> 고체 연료


사실 석유 가스와 경유, 윤활유를 읽어서 회로를 짜면 끝이다.




위와 같이 유체 탱크들을 입력으로 받는 수량 비교 조합기 두 개와, 석유 가스를 뺼 펌프가 있으면 된다.



조합기를 잠깐 설명하면, 하나는 석유 가스가 특정 값이 넘는지 검사한다. 석유 가스 > maxThreshold 부분이다.

만약 석유 가스가 값을 넘기면 X 신호 1을 출력한다.


다른 하나는 경유와 윤활유의 양을 검사한다. (경유 < minThreshold || 윤활유 < minThreshold) 부분이다. 여기는 OR 인게 중요하다. AND로 해버리면 안된다.

조건이 만족되면 X 신호 1을 출력한다.


여기서 두 신호를 동일한 표지로 해줘야 한다.






마지막으로, 석유 가스를 빼내는 펌프에 X = 2일때만 동작하게 해준다.


그러면...





이렇게 정유 공장이 가동되면서 경유와 윤활유가 채워진다!


아 참, 잊어먹고 안 말했는데 당연히 크래킹 결과물은 저장 탱크에 그대로 연결해주면 된다.