이번 2.0 업데이트로 팩토리오에 "열차 인터럽트"가 추가되었다.

보는 사람에게 미안하긴 하지만 나도 완전히 이해한 건 아니기 때문에 실험 해보고 생각을 좀 정리해서 쓰는 거라 좀 틀린 정보가 있어도 양해 해주기 바람. 그래서 공략이라기 보단 방법 제시의 성격이 강함.


이 글은 복선과 철도신호으로 철도 네트워크를 구성해보지 않은 뉴비에게는 적절하지 않을 수 있음. 또한 회로 네트워크를 다소 사용함. 나중에 시간 좀 나면, 회로 몰라도 청사진 복붙으로 해결할 수 있게 잘 다듬어볼게.


1. 기차 인터럽트

가장먼저 기차 인터럽트를 간단하게 설명함.
기본적으로 기차 인터럽트는 열차 일정 사이에 인터럽트 조건을 검사해서 임시 일정을 끼워넣는 기능임.


간단한 예제로 연료 재보급이 있다.


간단한 더블헤드 상차-하차 왕복인데, 연료공급역을 추가 해줬다.


이렇게 연료 (아무 기관차)가 일정 이하로 떨어지면 연료역으로 이동하도록 설정했음.






2. 범용 기차 인터럽트와 새 기차 물류

"범용(또는 일반화, 원문: Generic)" 기차 인터럽트 또한 이번 2.0에 추가된 개념임.


https://www.factorio.com/blog/post/fff-395

Friday Facts #395 - Generic interrupts and Train stop priority | FactorioHello, Another trains FFF!www.factorio.com

https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=61776

FFF #395 - 범용 인터럽트 & 열차 정차 우선순위확장팩 FFF 모음 정리 링크이번 내용은 이전 인터럽트 설명해주는 FFF를 보고와야 이해가 빠를거임https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=gall.dcinside.com

와일드 카드를 사용해서 다양한 상차/하차 인터럽트를 하나의 방법으로 표현할 수 있음.


일단 간단하게 물류네트워크를 만들어보겠음.


예제에 사용된 전체 네트워크 사진임. 각각 2 개씩의 구리 채굴, 제련 공장, 1 개씩의 철 채굴, 제련 공장을 잇는 철도 네트워크를 구상 할 것임.

예제기 때문에 실제 공장에 비해 많은 부분이 생략되었음. 사실 무한 상자 박아서 사기 쳐 놓은 곳이 좀 있다.




총 4 종류의 역이 필요함

1. 대기 역
2. 연료 공급 역
3. 공급 역(상차 역)
4. 요청 역(하차 역)

위쪽 부터 하나씩 살펴 보겠음.

1. 대기 역




대기 역은 딱히 특별할 것이 없음 기차 수 제한 만 잘 써주면 됨. 보통 1로 맞춤
사실 대기 역 수 == 기차 수로 운영하는게 정상적이라 기차 수 제한도 없어도 되긴 하는데 안전을 위해 일단 걸어둠.

또한 이름을 다 똑같이 맞춰주자. 단, 아이템, 유체 대기 역은 분리해서 정해야함. 난 그냥 아이템 아이콘으로 2-4 아이템 기자 표현했는데 그냥 글자로 적어도 좋다. 오히려 그게 나을 수 도 있음.

하나 더 중요한 것으로 공급 역으로 출발하는 인터럽트를 위해 전역 회로 네트워크를 기차연에 연결해야 함.


그리고 유체도 운송한다면, 전역 네트워크 빨간 색, 초록 색 둘 다 사용함, 유체를 다루는 역에는 빨간 색 전선을, 아이템을 다루는 역에는 초록 색 전선을 연결해주자.

왜 전역 네트워크가 필요한지는 나중에 설명하겠음.

2. 연료 공급 역



연료 공급 역도 특이 할 게 없다. 기관차 위치에 연료 공급만 잘 해주자.

그리고 여기는 기차 수 제한이 좀 중요함. 대기 역+열차를 블프로 20개씩 찍었을 때, 연료 역 쪽 철도가 잘 안되어있으면 한번에 열차 20개 들이닥쳐서 데드락 날 수 있다..


그러니까 주변 여유공간 맞춰서 기차 수 제한을 활성화 해주자.


3. 공급 역






공급 역부터 조금 복잡하다.


일단 이름부터 더 중요한데, 정해진 포맷에 맞춰야 함. 간단하게 [아이템아이콘]공급역 이렇게 맞춰 주는게 좋음.


회로들이 사용되는데, 크게 두 부분이 있다. 기차 수를 제한해주는 회로와 정류장으로 향하는 기차 수를 읽어 전역 네트워크로 보내는 회로다.

기차 수는 제한 할 때 사용한 방법은,
1. 새로 추가된 선택 선별 조합기로 화물차 한 량 당 적재량을 계산한다.
2. 산술연산 조합기로, 각 화물차에 공급하는 버퍼가 화물차 몇 개를 채울 수 있는지 계산한다.
3. 계산 된 결과 중 가장 작은 값을 선택 선별 조합기를 통해 찾아낸다. 이를 통해 기차 몇 대를 채울 수 있는지 알 수 있다.
4. 주변 선로 환경에 따른 기차 수 상한을 상수 조합기에 입력해두고, 둘 중 더 작은 값을 취한다.


복잡하면 그냥 수동으로 기차 수 제한 설정하고, 버퍼가 기차 하나 다 못 채우는 경우 정류장을 꺼버려도 될듯?

이제 정류장으로 향하는 기차 수를 읽어 전역 네트워크로 보내는 부분의 차례임.

이 작업은 해당 아이템을 옮기는데 몇 대의 기차가 일 하고 있는지 세는 용도로 사용됨.

이 부분은 비교적 간단한게, 그냥 단순히 열차 역에서 디폴트 C신호로 되어있는거 해당 아이템 신호로 바꾸고 그대로 레이더에 꽂으면 됨. 중요해서 다시 강조 하자면 아이템은 초록, 유체는 빨강으로 서로 분리해야 한다.


새로 추가된 매개변수화 청사진을 이용하면 요청 아이템, 기차 수 제한을 쉽게 설정할 수 있음.

아니면 따로 회로 신호 그룹을 만들어서 전역적으로 한꺼번에 관리 할 수도 있을 것임.

4. 요청 역



요청 역도 공급역과 비슷하다.


역 이름 [아이템아이콘]공급역 으로 통일해주고, 회로를 구성해주자.
여기선 공급역과 비슷하지만 더 복잡한 회로가 사용되는데,


1. 수용할 수 있는 최대 열차 수를 구한다.

2. (이 정류장으로 향하는 열차 - 현재 요청 역 열차 수 제한)를 전역 네트워크로 던진다.

3. 전역 회로 네트워크의 정보를 기차에 꽂는다.


각각 조금 더 복잡해짐.

1. 은 기차 몇 대 분량을 요청할지, 한 번에 받을 수 있는 최대 기차 수 제한은 몇 대 인지를 입력 받고, 공급 역과 비슷하게 처리 함. 대신 산술연산 조합기 하나 씩 추가 해줘야 함.
2. 도 산술연산 조합기 추가해서 - 붙여서 던져줌
3. 이건 그냥 2 할 때 꽂힌거 쓰면 된다.

여기까지 보면 드디어 전역 네트워크의 의미가 보이는데, 기차 네트워크에서 해당 품목의 기차를 총 몇 대 추가로 요구하는지 나타냄. 양수면 과잉으로 기차가 할당 된거고, 0-1이면 적절한 상태, 음수면 해당 품목에 기차가 좀 더 할당되어야 한다는 것을 의미함.

이를 이용해서 기차가 공급 역으로 출발하는 인터럽트 조건을 구할 수 있음. 바로 기차가 덜 할당된 품목(전역 네트워크에서 음수인 품목)에 화물이 빈 일 없는 기차를 할당해주면 된다.


5. 기차 인터럽트 조건


"그럼 품목 마다 공급 역으로 출발 하는 인터럽트를 다 작성해야 하나?"


아니다. 여기서 드디어 "범용 기차 인터럽트"가 사용된다. 일반화해서 인터럽트 조건을 작성하고 사용할 수 있게 해준다.


이 기차 네트워크에서 인터럽트는 총 4개 필요한데, 하나하나 살펴보도록 하자.


1) 연료 인터럽트

간단함.

아마 네 가지 인터럽트 중 제일 간단함.

맨 위 예제와 동일한 논리다.




2) 대기역 복귀 인터럽트

약간 힘들 수 있는데 화물 대 내렸는데 갈 곳 없으면 대기역으로 보내는 인터럽트임.



3) 공급역으로 출발하는 인터럽트



공급역으로 보내는 인터럽트인데 여기서 드디어 범용인터럽트가 쓰인다. 아까 전역 네트워크는 "현재 할당이 필요한 품목, 기차 수"를 의미한다고 했다. 즉 이게 0보다 작으면 그 품목의 공급역으로 보내버리면 된다. 하지만 공급역에 아이템이 불충분한 등의 이유로 갈 수 있는 공급역을 찾을 수 없으면, 목적지 없는 열차가 되어버리고, 2번 인터럽트에 의해 대기역으로 보내진다. 이미 대기역이라면 거기 가만히 있는다.

좀 더 안정적으로 하려면 여기 [회로아이콘]요청역 이 가득차있지 않습니다. 를 추가해주면 좋음


4) 요청역으로 출발하는 인터럽트



여긴 그냥 받은거 범용 인터럽트로 요청역에 보내면 끝이다.


6. 응용

여기서 유체도 처리하고 싶다면, 아까 초록, 빨강으로 신호를 나누었으니, 이번엔 전역에 빨강 써서 똑같은 세팅 해주면 된다.
이거 나눠야 되는 이유가 안 나누면 유체 열차가 아이템 운송 배정 받고, 아이템 열차가 유체 운송 배정받음.

여기서 더 응용하면 인터럽트를 나눠서 1-2기차, 2-4 기차 동시 운용도 가능함.




써 놓고 다시 읽어보니까 부족한게 많네, 생각보다 쓰는게 길어져서 새벽에 완성하는 바람에 검토도 제대로 못했음. 내일 시간 날 때 와서 다시 고쳐놓을게...


인터럽트를 이용한 한 열차로 모든물건 배달하기 수정일단 2.0 되고 기차 쓰기시작하기부터 차고지 인터럽트, 주유소 인터럽트로 꿀빨고 있다가https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=71130&gall.dcinside.com

다시 보니까 비슷한 아이디어로 이미 글 쓴 사람이 있네... 내 설명보다 좀 더 간단하고 좋은듯. 그래도 내껀 차고지로 안돌아도 되긴함.

필요하면 시간 날 때 글 좀 다듬는 겸 LTN마냥 청사진 딸깍으로 되게 만들어서 올릴게...


+) 혹시 테스트 맵 필요한 사람 있으면 여기로


https://drive.google.com/file/d/1UsHgQiVaVIV6Ksrdy0josm23z1s2GHWK/view?usp=sharing

기차 물류 테스트.zip기차 물류 테스트.zipdrive.google.com



%AppData%/Factorio/saves/
에 넣고 실행한 후, /editor로 에디터모드 해제하면 시작됨