안녕! 오늘은 AAI Programmable structures 모드로 물류 네트워크를 구현해봤어




먼저 잠깐 AAI 차량과 AAI AAI Programmable structures (AAI 프로그래밍 가능한 구조) 모드에 대해 설명할게




AAI 차량 모드의 가장 큰 특징은

차량을 마치 RTS 유닛처럼 조종할 수 있게 해준다는 거야




분명 굉장히 재밌는 모드고 가진 포텐셜도 높지만

조금만 차량이 많아져도 UPS 드롭이 눈에 보일정도로 심해지는 바람에 금방 인기가 식어버린 비운의 모드야





AAI 프로그래밍 가능한 구조 모드는 여기서 한층 더 발전해서

팩토리오에서 지원하는 회로 네트워크로 차량을 자동으로 조절할 수 있게 해줘



차량의 속도, 각도 목적지, 타겟 록온 등의 상태나

특정 범위 안의 타일에 철광석이 있는지, 바이터 둥지가 있는지 등등을 자동으로 확인할 수 있는 건물을 추가해줘서 응용 가능성이 굉장히 높아




모드 설명 페이지에도 적혀있는데

(https://mods.factorio.com/mod/aai-programmable-vehicles' target="_blank">https://mods.factorio.com/mod/aai-programmable-vehicles)

(영어가 어렵다면 구글 번역ㄱㄱ)




이 모드로는 적 자동 공격이라던지





채굴기지 자동화라던지


바닐라에서 손으로 할수밖에 없었던걸 무려 자동으로! 그것도 2가지나! 할 수 있다고 해



그런데 지금까지는 킹론상 가능하다는 얘기만 들었지

이걸 실제로 동작하는걸 보여준 사람이 아무도 없었거든



포럼에도 가이드가 있고 블루프린트 문자열도 있지만

막상 가져와서 써보려고 하면 너무 예전 버전이라서 쓸 수 없었어

이 모드가 나온게 아마 0.14였나 그래.

그 이후에 팩토리오는 0.14~0.18까지 얼리엑세스 기간을 거쳐서 1.0 정식 출시, 그리고 1.1까지 왔으니

지금 동작하길 바라는것도 무리지



게다가 포럼에 올라온 내용들도 까고 보면 대부분 완전 자동화까지는 아니고 반자동에 가까웠어


까고보면 지정된 영역으로 마이너 차량 단 1대를 자동으로 보내는 정도가 한계였지



그리고 이 모드는 매 틱(1/60초)마다 차량, 타일 등을 스캔한다는 문제로

UPS 드롭 문제를 더욱더 심화시켰어



예전부터 관심을 가지고 있었던 모드였는데 UPS 문제로 버려두고 있다가

이번에 동영상 가이드를 다시 훝어보면서 global clock이라는 괜찮은 아이디어를 발견해서

그걸 적용하는 김에 AAI 차량의 포텐셜을 한계까지 끌어내봤어


그 덕분에 AAI 프로그래밍 가능한 구조물에서 발생하는 UPS 드롭을 거의 무시할 수 있는 수준으로 줄였어

차량 하나하나에서 발생하는 UPS 드롭은 어쩔 수 없지만ㅋㅋ

그래도 한 50대까지는 보통 성능의 컴퓨터에서도 무리 없이 쓸만한거 같아







지금부터는 이번에 구현한 내용이야

AAI 차량을 물류 네트워크처럼 사용할 수 있도록 해봤어



저 차고처럼 생긴 건물은 차량 배치 장치야


저기 안에 차량을 배치하면

차량을 미리 지정해둔 설정을 넣어줄 수 있어


원한다면 투입기로 차량 배치까지 완전히 자동화도 가능해



LTN이라는 기차를 물류로봇처럼 다루는 모드에서의 경험을 생각해보면

차량을 늘릴 일이 그렇게 많진 않을거라고 생각해서 지금은 손으로 배치해봤어




그리고 이 차량은 자동으로

앞서 마킹해둔 채굴 영역으로 가게 돼


어느 자원을 채굴할지는 미리 지정해뒀어

바닐라에는 철, 구리, 돌, 석탄 4가지 자원이 있으니

차량 배치 장치도 4종류가 필요하겠지?


지금 차량은 구리 광석용에 배치했으니 구리 광석으로 갈거야




이런식으로 여러대, mk1부터 mk5까지 여러 다른 버전이 있더라도 알아서 자기 위치를 찾아가는 것까지 구현했어


이제 자원이 부족하면 원하는 곳에 마이너를 배치만 해주면 알아서 채굴하러 찾아갈거야


이렇게 해서 채굴 자동화 완료!



여기까진 전에도 완벽하진 않지만 어느정도 구현했었기 때문에

그래도 뒤에 나올 물류 자동화에 비하면 그나마 쉽게 했어.

쉽다고는 했지만 만드는데 바닐라 새 맵에서 로켓 한번 쏠 정도 시간은 걸렸을거야ㅋㅋㅋ


혹시 예전에 했던 방식이 궁금하다면 아래 글 마지막을 보면 돼.

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






다음으로는 운반용 홀러(Hauler) 차량이야


기본적인 사용법은 경로를 만들고 그 경로를 왔다갔다 반복하게 하는거지


그런데 이러면 매번 경로를 수동으로 만들어줘야 하는데다가

아이템 종류가 늘어나서 차량이 추가로 필요하면 또 배치해줘야 하고

아이템 종류마다 그때그때 필요량이 다를텐데

당장 운반할 필요가 없는데 빈채로 왔다갔다 하면서 놀고있는 차량이 많아지면 괜히 UPS 코스트가 커지겠지?




그래서 홀러를 물류로봇처럼 작동하도록 구현해봤어!






바닐라에서 물류로봇이 빨간상자에서 파란상자로 아이템을 옮기는건 다들 봤을테고

Transport Drones 모드를 써본 친구들도 있을텐데

홀러가 그 드론이 된다고 생각하면 대충 맞을거야


물류로봇의 기본적인 로직을 잠깐 살펴보고 가면 이해가 쉬울거야


기본적인 로직은

1)드론은 로보포트에 대기하다가

2)요청자(파란상자)가 생기면 공급자(빨간상자)에서 아이템을 운송하고

3)다시 로보포트로 돌아가겠지




공급자(Provider)에 아이템이 충분하다는 신호를 받아서 경로가 생성됐어

그리고 홀러 하나가 경로를 발견해서 공급자인 마이너 차량으로 달려가는 모습이야



공급자는 마이너 차량일수도 있지만 물품 보관함 역할을 하는 차고지가 될수도 있겠지?
전자회로가 차고지에 충분히 차있고, 동시에 요청자(Requester)로 지정된 차고지가 비어있기 때문에
또 다른 차량이 전자회로 공급자로 지정된 차고지로 이동하는 모습이야


지금 구현한 로직으로는 이렇게 두 종류의 공급자가 있을 수 있어.


움짤 마지막에 전자 회로가 차고지에서 차량으로 이동하는 모습이 보일거야


저것도 이 모드의 장점 중의 하나인데
차고지와 차량, 또는 차량간 아이템 운송이 저런식으로 굉장히 빠르게 이루어져서
기차처럼 복잡한 로딩/언로딩 셋업을 쓰지 않아도 돼서 좋아



그리고 물건을 가득 채웠으니 이번엔 요청자(Requester)로 가서 하차해야겠지?




하차한 뒤에는 다시 연료를 보급할 차고지로 돌아가게 돼






마이너 차량이 공급자일 경우에도 마찬가지야





차량간 운송으로 자원을 받아와서 요청자로 지정된 차고지로 이동하고

경로 지정해주면 처음에 가속할땐 자주 저렇게 들이박긴 하는데 딱히 목적지까지 가는데 문제는 없더라 ㅋㅋㅋㅋ




하차가 끝나면 다시 연료 보급지로 이동후 휴식하게 돼



그리고 아래는 이번에 만든 논리회로야




시계 회로(Global Clock), 단순히 1부터 지정된 숫자까지 매 틱 증가한 뒤 1으로 다시 리셋되는 회로야

테스트 하다 보니 2초, 10초, 100초짜리 시계 회로 3개를 자주 써서 저렇게 3개를 만들어뒀어


T값을 바꾸면 차량에 얼마나 자주 신호를 보낼지 설정할 수 있어




중형 전신주 위쪽은 모든 마이너를 루프하면서

4가지 자원 중에 한가지 신호로 표시된 마이너를 그 자원 필드로 보내는 회로야

아래쪽은 마이너 인벤토리에 4가지 중 한가지 이상의 자원이 충부하면 공급자로 표시해주는 역할을 해



다음은 차고지를 요청 상자, 수동형 공급 상자와 같이 표시해주는 회로야


차고지마다 공급자인지, 요청자인지 설정해주고

아이템의 양을 조건으로 해서

요청자에 빈 공간이 충분하면서 동시에 공급자에 아이템이 충분하면

홀러가 아이템을 운반하러 올 수 있도록 경로를 표시해주는 역할을 해





마지막으로 홀러를 물류드론처럼 활동하도록 해주는 회로야


이건 알고리즘을 손코딩해서 적어놓고 봐도 간단하게 설명할 수가 없을 것 같아서 자세한건 지금은 생략할게

어쨌든 결과적으로는 물류드론처럼 움직이는걸 목표로 했어

1)차량은 연료가 있는 차고지에 대기하다가

2)요청자가 생기면 공급자에서 아이템을 운송하고

3)다시 차고지로 돌아가는 로직이야





이 글 쓰면서 테스트용 맵 쭉 켜놓고 봤는데 잘 작동되는거 보니까 정말 기쁘네ㅋㅋㅋ

내가 영어를 조금만 더 편하게 구사할 수 있었다면

모드 제작자인 Earendel에게 이 글을 번역해서 보내주고 싶을 정도야


같은 제작자가 만든 우주탐사 모드도 한창 재밌게 즐기고 있는데

이런걸 모드로 구현해내는거 보면 정말 대단하고 느껴져


그리고 게임 내에 메모를 남길 수 있게 해주는 attach notes 모드가 굉장히 유용했어

코딩할때 주석이 꼭 필요하듯이 메모가 있고 없고 차이가 크더라고


다음에는 이번에 만든걸 활용해서 우탐모 도전해볼까 싶어ㅋㅋ




세이브 파일이나 구조물의 블루프린트가 궁금하다면

적당한 공유 방법을 댓글로 알려주면 공유해줄게


반응이 좋으면 로직을 풀어 쓴 간단한 가이드 정도는 작성할 수 있을것 같아


그럼 이만!


아래는 참고하면 좋은 글들


[정보] AAI 모드 가이드 1 - 채굴차량, 홀러, 차고, 차량배치장치[정보] AAI 모드 가이드 2 - 스캐너/컨트롤러(타일, 지역, 유닛정보)

AAI 프로그래밍 가능한 차량 모드 페이지

(https://mods.factorio.com/mod/aai-programmable-vehicles' target="_blank">https://mods.factorio.com/mod/aai-programmable-vehicles)

AAI 프로그래밍 가능한 차량 모드의 자세한 사용법

(https://forums.factorio.com/viewtopic.php?t=38475)

AAI 프로그래밍 가능한 구조 모드의 자세한 사용법

(https://forums.factorio.com/viewtopic.php?f=93&t=38473)