1. 개요
팩토리오의 방어 포탑들 중 레이저 포탑은 설치와 운용의 편의성 면에서 다른 포탑들에 비해 압도적인 우위를 가진다. 탄약을 따로 채워줄 필요 없이 전기만 연결해주면 되므로 탄약 생산이 필요없고 당연히 생산라인을 만들 필요도 없으며 투입기나 파이프 같이 지속적인 운용을 위해 바로 옆에 방향을 맞춰서 뭔가를 붙여줄 필요도 없고 그냥 전신주 옆에 세워두기만 하면 알아서 탄약 생산/공급/보충을 한다. 작동할 때 전력 소모량이 좀 많이 크긴 한데 그거야 편의성에 대한 대가라고 치면 감당 못할 수준도 아니다. 설치되는 걸 제외한 모든 걸 전기 하나만으로 알아서 하는 애인데 그럼 일할 때 그 전기라도 많이 먹여야 일을 잘하지.
하지만 일할 때 전기를 먹는 거야 그렇다 치더라도 일도 안 하면서 전기를 처먹는 건 좀 아니꼬운 일이다. 적당히 처먹는 것도 아니고 그냥 아무 것도 안 하고 거기 존재하는 것만으로도 한 대 당 대기전력 24kW를 소모하는데 100대 정도 설치하면 어떠한 공격도 없이 그냥 그 자리에 있는 것만으로도 증기기관 3대가 풀로 작동했을 때와 맞먹는 수준의 전력을 지속적으로 삭제시킨다.
레이저 포탑은 DPS가 상대적으로 낮기에 수량을 넉넉하게 깔아야 하고 굳이 레이저 포탑이 아니라 기관포탑이라 치더라도 기지가 어느 정도 커지고 기지의 외곽을 방어공백이 생기는 곳 없게 막으려면 '최소한으로만' 둘러주려 해도 백 단위는 기본으로 깔아야 하며 확실한 방어를 위해 '넉넉하고 촘촘하게' 깔고자 한다면 천 단위도 우습게 찍는다. 그리고 만약 그 포탑들을 전부 레이저로만 둘러주려고 한다면 오로지 '대기전력으로만' 원자력 터빈 서너 개 이상의 전력공급을 필요로 할 것이다. 적들은 똘똘 뭉쳐서 좁은 지역에 잠깐잠깐 오는데 방어는 외곽라인 전체를 방어해야하니 그쯤되면 포탑을 작동할 때 쓰는 전기보다 대기전력으로 쓰이는 전기가 더 클 거다.
그런데 만약, 적들이 없을 때는 포탑에 아예 전력을 끊어 대기전력을 0으로 유지하다가, 적들이 근처에 왔을 때만 전력을 연결해 잠깐잠깐 쓸 수 있게 만든다면 어떨까? 그렇게 만든다면 레이저 포탑을 얼마나 깔든 편의성은 편의성대로 누리면서 위에서 말한 문제점들은 무시할 수 있지 않을까?
2. 그래서 그걸 어떻게 할 건데?
위에서 말한 조건을 구현하려면
1. 평소에는 전기를 완전히 끊어 대기전력을 0으로 유지시키다
2. 적들이 가까이 접근하면 일시적으로 전력을 연결시키고
3. 적을 다 잡으면 다시 전기를 끊는
방식을 써야한다. 즉, 적들이 포탑 근처로 가까이 왔는지 감지해서 신호를 보내주는 시스템을 만들어야 한다. 그러나 모드라도 만들어서 깔지 않는 이상 적들을 감지해서 적에 대한 신호를 보내주는 '적 감지 센서' 같은 아이템은 DLC까지 포함해도 팩토리오 내에 존재하지 않는다. 그러니 위에서 말한 조건을 구현하기 위해선 기존 아이템들을 여차저차 어떻게든 사용해서 간접적으로라도 해당 기능을 구현할 필요가 있다.
기관 포탑과 화염방사 포탑은 전기를 사용하지 않고도 사정거리 내에 적이 들어오면 자동으로 공격을 가한다. 그리고 이 둘은 레이저 포탑과 달리 총알과 기름이라는 물리적인 수단을 발사하므로 공격을 하면 탄약이 줄어들게 된다. 즉, 중간과정을 빼고 결과만 보면 '적이 사정거리 내에 들어오면 → 탄약이 줄어든다' 라는 결론이 나오며 이를 뒤집으면 '탄약이 줄어들었으면 → 적이 사정거리 내에 존재하는 것'이라는 결론을 내릴 수 있다.
'적 감지'라는 조건은 방법을 찾았으니 이제 '적을 다 잡으면'이라는 조건을 해결해야 한다. '적을 다 잡았다'라는 판정을 내리는 방법은 두 가지인데, 하나는 '탄약량의 변화가 없을 때'를 감지하는 거고 다른 하나는 그냥 '일정시간이 흘렀을 때' 다 잡았다고 치는 거다. '탄약량 변화 없음'은 설명 안 해도 이해 할 거고 '일정 시간 경과'는 어차피 적들이 축차 투입이나 시간차 공격 같은 걸 쓰는 것도 아니고 다 같이 동시에 어택땅 찍고 전 병력 꼴아박는 게 끝이므로 교전 시간이 초반에는 5초, 극후반에도 20초 내외이기 때문에 그냥 그 시간 지나면 전투가 끝났다고 판단하는 것이다. 그 시간 안에 니가 죽든 내가 죽든 결론이 날 테니 시간 맞춰 자동으로 전원이 꺼지게 해도 적의 전멸 여부를 감지해서 꺼지게 하는 것과 큰 차이가 안 난다.
정리하자면 위의 3가지 조건은
1. 평소에는 전기를 완전히 끊어 대기전력을 0으로 유지시키다
2. 포탑의 탄약량에 변화가 생기면 일시적으로 전력을 연결시키고
3. 탄약량이 줄어들지 않거나 또는 일정시간이 지나면 다시 전기를 끊는
방식이라고 정의할 수 있다. 이제 방법을 알았으니 이걸 실제로 구현해보자.
3. 타이머 방식
https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=10938
타이머 만드는법1틱당 1씩 올라가는 타이머를 만들어볼거임1배속 60 UPS 기준 1/60초에 1틱임 (60틱 = 1초)그리고 조합기는 일반적으로 1틱에 한번씩 연산하게 되어있음이게 가장 기본적인 타이머임N이 0으로 시작해서 1 증가gall.dcinside.com일단 이글부터 보기 전에 위에 저 글부터 보고 와라. 타이머가 뭐고 어떻게 만드는 지는 알아야 타이머를 써먹든 말든 하지.
위의 사진은 지금 내가 외곽지역에 써먹고 있는 포탑 배치다. 이제서야 보라색 과학팩 만들기 시작한 팩린이라 아직은 저 정도로도 충분히 막을 수 있거든. 예시로 가져온 거니 굳이 저 형태랑 똑같이 따라할 필요는 없고 방법만 이해한 뒤 현재 니들이 쓰고 있는 포탑에 알아서 적용시키면 된다. 원리를 알면 응용은 자유다.
이제 저 포탑들에 전력 온오프 기능을 추가해보겠다.
우선 포탑 하나를 기관포탑으로 교체한 뒤 투입기와 상자를 설치했다. 공간 문제로 대형 전신주는 중형 전신주로 교체했고 전원 스위치와 수량 비교 조합기, 일정 신호 조합기도 하나씩 설치했다. 조합기들은 타이머용으로 설치한 거고 전원 스위치는 전력 차단/연결을 위해선 당연히 필요한 설비다.
이제 포탑을 전원 스위치와 타이머 입력부에 연결한 뒤 포탑에서 탄약 읽기를 반드시 체크해주자. 처음에는 저런 창이 안 뜰 거고 회로로 연결시킨 다음에야 뜰 건데 저거 체크해야 포탑의 탄약을 읽고 적이 있는 지 없는 지를 감지할 수 있다. 체크 안 하면 전기는 평생 연결 안 된다.
전원 스위치와 타이머 둘 다 탄약이 10 미만이면 작동되게 설정한다. 참고로 나는 타이머 신호를 t로 설정했다. 시간 관련된 신호는 t로 설정 안 하면 이과형들이 맴매한다. 니들도 이런 자동화 게임하면서 문과 소리 듣기 싫으면 앞으로도 시간 신호는 t로 설정해라.
탄약이 10미만일 때 작동되게 설정한 이유는 투입기가 포탑에 탄약을 10개까지만 넣기 때문이다. 상자에 탄약이 100개가 있는 1000개가 있든 포탑에 탄약이 10개 이상 들어가있으면 포탑이 꽉 찬 걸로 인식해 투입기가 탄약을 더 안 넣는다. 때문에 '작동 기준'을 10개로 설정하고 그보다 작아지면 적이 있는 걸로 판단해 작동되게 한 것이다.
일반 투입기가 물건을 두 개 이상 집을 수 있도록 테크가 올라가 있다면 투입기의 '묶음 크기 재정의'를 1로 설정해라. 이러면 최대 얼마나 집을 수 있든 무조건 하나씩만 집어서 포탑에 넣는다. 이거 설정 안 하면 탄약이 9개 들어가 있을 때 2개 3개씩 더 넣어서 포탑 안에 탄약이 총 11개 12개가 된다. 이래도 작동이 되긴 하니 필수는 아닌데 이러면 탄약이 10개 미만으로 떨어질 때까지 시간이 더 걸리니 레이저 포탑의 작동도 늦어져 결과적으로 안 맞아도 되는 거 한두대 더 맞게 된다. 괜히 랜덤하게 탄약 채우려 하지 말고 그냥 1개씩 넣고 10개로 딱 맞추자.
타이머의 출력을 투입기와 연결한 뒤(초록색 선으로 연결했다) 원하는 시간이 지나면 투입기가 작동하게 설정했다. 지금은 예시로 하는 거라 300틱(5초) 지나면 작동하도록 짧게 설정했는데 실제로 적용할 때는 예시처럼 똑같이 300으로 설정하지 말고 각자 알맞는 시간을 설정하자.
여기까지 왔다면 설정 끝이다. 결과물을 한 번 보자
적들이 다가와서 → 탄약이 소모되면 → 전력이 공급되서 → 포탑이 작동되고 → 적당히 시간이 지나면 전력이 차단되는 모습이다.
화염방사 포탑에 적용한 사진. 기관포탑과 방법은 동일하되 기관포탑을 화염포탑으로, 투입기를 펌프로 대체하면 똑같은 방법으로 쓸 수 있다. 화염포탑은 유체가 100까지 들어가므로 수량은 10이 아닌 100으로 설정하면 된다. (10으로 설정해도 전혀 문제 없이 돌아가긴 한다. 그래도 꽉 차있는 게 보기 좋으니 100으로 하자)
화염포탑은 기관포탑은 물론 레이저 포탑보다도 사정거리가 기므로 기관포탑은 적들이 가까이 다가와야 탄약을 소모해서 전력을 연결시킬 수 있지만 화염포탑은 적들이 아직 다가오기도 전에 공격을 가해 적들이 레이저 포탑 사정거리 바깥에 있을 때 전력을 연결시켜서 레이저 포탑 사정거리 내로 들어오자마자 사격을 하게 할 수 있다. 기름을 연결시킬 수 있는 상황이라면 기관포탑 대신 가급적 화염포탑을 사용하자.
(24.12.13 수정)
다만 화염포탑 연결 시 별도로 유체를 빼줄 수 있는 펌프를 별도 전력망으로 하나 더 추가해야 한다. 유체라는 게 딱딱 나눠지는 게 아니라 자동으로 균등하게 퍼지며 그러다 유체가 필요한 구조물을 만나면 파이프보다 우선해서 자동으로 채워지는 방식이기 때문에 파이프가 연결되어 있으면 연결된 파이프가 다 비워질 때까지 포탑의 기름은 조금도 줄어들지 않는다. 그래서 파이프만 없으면 될 줄 알고 전 버전에서는 '펌프를 화염포탑에 직접 연결하면 된다'고 썼는데 레이저 포탑이 작동을 안 하길래 뭔가 이상해서 보니까 '펌프에 남아있던 기름'도 파이프처럼 인식해서 포탑 기름이 조금도 줄어들질 않더라.
근데 그거 알아차릴 일주일 동안 레이저 없이 화염포탑 하나만으로 벌레들 싹 다 잡고 있었다. 화염포탑 짱짱맨. 어쨌든 잔류기름 뽑아줄 펌프 하나 추가해주니까 작동 잘 되니 화염포탑 쓸 거면 펌프를 두 개 써줘라.
4. 변화 감지 방식
타이머 방식은 가장 간단한 방식이다. 전력 스위치를 제외하면 사용되는 회로는 오로지 수량 비교기와 일정 신호기 둘 뿐이다. 쓰이는 회로가 가장 적으니 회로에 쓰이는 공간을 최대한 줄여야 하는 사람은 타이머 방식을 사용하면 된다.
허나 타이머 방식은 최적의 방식이라고 하기는 어렵다. 적이 있든 없든 무조건 일정시간만큼 전원을 켜놓으니 적이 다 사라지더라도 쓸데없이 전력을 연결시키는 시간이 생긴다. 이걸 최소화하겠다고 최적의 전투시간을 찾는 건 더 쓸데없는 낭비다. 게임이 진행될수록 몰려오는 적들의 수와 체력들이 점점 증가하고 각 둥지들도 진화가 적게 된 둥지/많이 된 둥지가 다르니 시간따라 위치따라 각 포탑의 필요 작동 시간이 다 다를텐데 그걸 찾아봤자 뭐해 어차피 바뀔 거.
그러니 일정 시간이 아니라 '전투가 끝나면' 전력 연결을 끊는 시스템을 만드는 게 더 좋은 방법일 것이다. 구체적으로 말하자면 '탄약이 더 이상 줄어들지 않을 때' 작동을 멈추는 시스템을 말하는 거다. 단순히 특정 수량보다 작기만 하면 타이머가 돌아가게 하는 게 아니라 '줄어드는 상태가 유지되는 지' 판단해서 더 이상 탄약이 줄어들지 않을 때 타이머를 돌리면 원하는 기능이 나올 것이다.
근데 얼핏 들으면 아주 개빡센 회로를 만들어야 할 것처럼 들린다. 팩토리오에는 크다작다같다 체크해주는 수량 비교기랑 계산기 기능 밖에 못하는 산술 연산기 밖에 없는데 이 둘로 '줄어들고 있다'라는 상태를 감지해낸다니, 어디 평야지대에 회로들로 도배해서 컴퓨터라도 만들어야 하나?
걱정마라. 그럴 필요 없다. 위의 사진처럼 기존 설비에 산술 연산기 하나만 추가해주면 탄약 감지기 완성이다.
포탑에 연결한 뒤 (포탑에 넣어진 탄약 * 1 = A신호) 라는 설정을 입력하자. 바뀌는 건 아무 것도 없이 오로지 (빨간탄약)이라는 신호가 (A)라는 별개의 신호로 바뀌는 거다. 나처럼 * 1 로 해도 되고 + 0 으로 해도 된다. 중요한 건 수량은 동일하게 유지시키면서 신호만 바꿔치기 한다는 거다.
타이머에 연결해준 뒤 타이머 설정에 '탄약 값이 A와 같거나 클 때' 라는 조건을 AND 조건으로 추가해준다. 투입기도 여유시간을 둘 필요가 없으니 전보다 더 짧게 100틱으로 설정해준다. 이렇게 하면
용량 때문에 화질을 좀 많이 낮추긴 했는데 그래도 보이긴 할 거다. 탄약이 10개 미만으로 내려간 즉시 타이머가 작동하지만, 탄약이 1개씩 줄어들 때마다 타이머가 초기화되고 전투가 끝난 다음에야 초기화가 멈춰 투입기가 작동하는 모습이다.
여기까지 이해한 사람들은 이제 머리를 쥐어뜯으며 "시발 저게 왜 되는 건데!"라고 외쳐보자.
A라는 신호는 탄약의 수량 정보를 실시간으로 갱신해서 반영하는 신호다. 탄약이 9개면 A도 9개고 탄약이 6개에서 5개로 떨어지면 A도 즉시 6개에서 5개로 떨어진다. 즉, 탄약 수량과 A신호는 항상 같은 수량이어야 하고 '같거나 크다'라는 조건을 가진 타이머를 초기화시킬 수 없는 구조다. 근데 되네? 시발 왜?
여기서 니들이 알아야 할 정보 하나. 수량 비교기나 산술 연산기는 결과값을 계산하는데 1틱의 시간이 걸린다.
탄약이 하나 줄어들면 타이머는 중간계산 과정 없이 줄어든 탄약값을 그대로 반영하지만 산술 연산기는 1틱의 시간 동안 새로운 A값을 계산해서 결과값을 출력한다. 아주 짧은 시간이지만 어쨌든 잠깐 동안 탄약 값이 A값보다 작아지게 되고 '같거나 크다'라는 조건을 만족하지 못해 타이머를 초기화시키게 되는 것이다.
조건을 '같다'가 아니라 '같거나 크다'로 한 이유는 투입기에서 탄약을 보충하는 과정 때문이다. '같다'로 설정하면 투입기가 탄약을 넣으면서 탄약값이 증가하는 것도 A값과 불일치를 만들어 타이머를 초기화시킨다. '같거나 크다'로 설정하면 탄약이 줄어드는 건 타이머에 영향을 끼치지만 탄약이 늘어나는 건 아무 영향 없기 때문에 위 움짤과 같은 상황을 만들어낸다.
산술 연산기 하나만 추가했는데도 전투 종료 즉시 탄약을 보충하는 시스템이 만들어졌다. 화염방사 포탑 또한 원리는 같으니 설명은 생략한다.
5. 메모리 방식
회로 자체의 성능은 아무 문제가 없다. 첨부한 짤에서 보듯 두 방식 모두 연결과 단선 모두 제때제때 잘 이뤄진다. 위에서 설명한 방식을 그대로 따라하면 기존에 쓰이던 대기전력을 어마어마하게 줄일 수 있을 것이다.
그러나 저 방식을 보면서 약간의 불편함을 느낀 사람도 있을 수 있다. '포탑 근처에 투입기를 반드시 둬야 하나? 체력도 포탑에 비해 훨씬 낮으니 후반부 스피터들이 몰려와서 침 뱉으면 투입기는 쉽게 터져나갈 텐데, 그러면 그 때마다 보강해줘야 하는 건가?'
위와 같은 실용적인 이유로 찝찝함을 느끼는 사람도 있을 테고 그냥 포탑 사이에 투입기가 있는 게 미관상 보기 짜쳐서 불편한 사람도 있을 거다. 이유야 어쨌든 적을 감지해서 → 탄약을 쓰고 → 전기를 연결한 뒤 → 탄약을 채우고 → 전기를 끊는 과정에서 탄약을 채우는 과정을 생략할 방법은 없을까? 포탑들을 골고루 섞어쓰는 사람이라면 탄약 소비량이 클 테니 투입기가 필수지만, 레이저 포탑으로 도배하고 다른 포탑은 적 감지용으로 딱 하나만 세울 사람이라면 굳이 투입기까지 써서 보충할 필요 없이 그냥 처음 설치할 때 탄약 가득 채워넣고 잊어버리면 되는 거 아닐까?
일단 결론부터 말하자면 가능은 하다. 위의 두 방식이 '10개'라는 고정된 작동 기준을 정해두고 그보다 탄약이 줄어들면 작동하는 방식이라면 이번 방식은 고정된 수량이 아니라 '현재 포탑에 남아있는 탄약'을 별도의 메모리에 저장한 뒤 메모리에 저장된 수량과 현재 탄약 수를 비교하다 차이가 나면 전력을 연결시키고 전투가 끝나면 메모리에 저장된 숫자를 다시 '현재 포탑에 남아있는 탄약'으로 갱신하는 방식이다. 즉, 기준 수량이 계속 바뀌는 방식이다.
확실하게 말해야 할 부분은 투입기를 쓰는 방식이 훨씬 간단하며 회로로 투입기를 대체하려면 더럽게 복잡해진다는 점이다. 화염방사 포탑에는 적합하지 않고 더럽게 복잡하며 회로가 공간도 많이 차지하는 실용성은 떨어지는 방식이지만, 그렇다고 여기까지 왔는데 이 방식을 설명에서 생략하면 내가 찝찝해서 못 잔다. 어떻게 하면 구현 가능할 지 머리 쥐어뜯어가며 고민했는데 실용성 떨어진다고 기억 밑바닥에 묻히기에는 그동안 내가 들인 노력이 아깝다. 방법이라도 보고, 어디 다른 곳에 쓸 수 있겠다 싶으면 응용해서 써먹어 본 다음, 니놈의 뻘짓 덕분에 이런 것도 달성할 수 있었다고 댓글 한 번 달아주길 바란다.
자 그럼 이제 방법을 알아보자.
우선 수량 비교기를 설치한 뒤 포탑에 남아있는 탄약이 기준 수량 M과 일치하지 않으면 신호를 보내도록 설정한다. 나는 메모리Memory에 남아있는 정보라서 기준 수량을 M으로 설정했는데 따라할 때는 각자 원하는 알파벳으로 설정하면 된다. 포탑 안에 탄약은 '랜덤한 임의의 숫자'라는 걸 강조하기 위해 딱 떨어지지 않는 숫자인 73으로 맞춰놓고 찍었다.
타이머도 설치한 뒤 '탄약이 기준 수량과 불일치하다는 신호'를 받으면 작동하게 설정하고 산술 연산기도 설치해 현재 탄약값을 M으로 바꿔주게 했다.
중간 사진. 이건 설명글이니 보기 쉬우라고 각 조합기들을 붙이지 않고 떨어트려놨는데 따라할 때는 따닥따닥 붙여서 공간을 아끼면 된다. 여기까지는 어려운 곳 없이 전부 다 이해했을 거라고 믿겠다.
수량 비교기를 추가해 위 사진과 같이 설정해준다. A가 1이면 B가 0이고 A가 0이면 B가 1이 되게 만들었다. 한 마디로 A에 대한 NOT 게이트를 만든 거다.
산술 연산기 바로 옆에 수량 비교기를 설치해주고 t가 원하는 값이 되었을 때 Z신호를 출력하도록 설정한다. 위에 A, B신호와 전혀 별개의 신호니 햇갈리지 않게 Z로 했다. 이번에도 예시로 하는 거라 300틱(5초) 지나면 작동하도록 짧게 설정했다. 이 때, 부등호(>)로 설정하지 말고 반드시 등호(=)로 설정해서 오로지 단 한 틱만 신호를 보낼 수 있게 해야 한다. 부등호로 설정해서 여러 틱 작동되게 하면 타이머의 T값처럼 메모리의 M값도 계속 증가해서 고정이 안 된다.
그리고 기존 설치한 산술 연산기의 수식을 * 1 에서 * Z로 바꿔준다. 이러면 평소에는 * 0 이 되어 아무런 값도 전해주지 않다가 300틱이 되었을 때만 * 1 이 되서 탄약 값을 M값으로 바꿔주게 된다. 혹시나 해서 말하는데 자동화 전선으로 각 조합기를 연결해주는 거 잊지 말자. 빨간색 초록색 전선들 말하는 거다.
그리고 드디어 이번 방법의 핵심인 메모리 셀을 설치해주자. 메모리 셀이 뭔지 모른다면 대충 '출력 값을 그대로 입력 값에 연결해서 값을 조합기에 유지시켜 주는 장치' 정도로 이해하면 되겠다. 배터리에 SR래치 설치해본 사람은 익숙한 개념일 거다. 위에 사진에서는 빨간 전선으로 출력 값과 입력 값을 연결해줬다.
최종 사진이다. 수량 비교기 4개, 산술 연산기 2개, 일정 신호기 1개가 설치되었다.
적들이 처들어오지 않는 평상시에는 A신호는 0이고 따라서 B신호는 1이다. 위의 사진처럼 만들면 평상시에는 기준 수량 M * 1 이 되서 M값이 계속 유지되다 탄약이 줄어들면 M * 0 이 되서 초기화되고 거기서 300틱(다시 말하지만 300틱은 예시고 각자 알맞는 값을 설정하자)이 지나면 Z값이 1이 되서 M값에 '현재 탄약 수량'을 반영시켜 저장하는 방식이다. 글로만 설명 들으면 잘 이해가 안 갈테니 직접 결과를 보자.
는 Fail...
위 짤은 30FPS라 아예 아무런 값도 안 나오는 것처럼 보이는데 실제로는 1프레임만 M값이 바뀌고 나머지는 텅 비게 나온다.
이론상으로는 잘 작동해야 하는데 실제로 작동시켜 보니 시스템이 맛이 갔다. 왜 이렇게 되는 지 이유를 알기 위해 이전 방식에서 '수량 비교기나 산술 연산기는 결과값을 계산하는데 1틱의 시간이 걸린다'라고 한 말을 떠올려 보자.
탄약 수량을 M에 반영하고 M값을 현재 탄약 수량과 비교하는 과정 → B값을 NOT A 로 바꾸는 과정 → B값이 메모리 셀에 도달하는 과정이 시간이 걸려 연산 과정에서 M값이 소멸해버렸다. 소멸을 막기 위해선 Z값을 5틱 이상 주거나 B값을 미리 1로 바꿔놔야 한다.
Z값을 5틱 이상 주는 건 얼마나 유지시킬 지 틱 단위로 관리해야 하고 만약 살짝이라도 삐끗하면 M이 소멸하거나, 아니면 2틱 이상 전달되서 M=146이나 M=219가 되어버릴 것이다. 그러니 Z값 말고 B값을 미리 바꿔놓는 방식을 써보자.
아까 만든 NOT 게이트에서 t가 10보다 클 때라는 조건을 OR 조건으로 추가한다. 이러면 탄약 수량이 달라진 직후에는 B가 0이 되어 M값을 초기화하지만 타이머가 조금만 진행되면 B는 1이 되어 새로이 받는 M값을 유지시킬 수 있다.
자, 그럼 이번에야 말로 결과를 보자.
성공이다. 탄약 수량이 달라지면 일정 시간이 지난 후에 M값에 반영시키고 새로운 M값을 다시 포탑 수량과 비교하는 모습이다. 이렇게 투입기 없이도 타이머 방식을 구현해냈다.
이제 전원 스위치를 탄약 수량과 M값이 다를 때 연결되도록 설정하면 전력이 필요할 때만 연결된다.
만약 타이머 방식이 아니라 감지 방식으로 쓰고 싶다면 똑같이 산술 연산기 하나 추가해주고 타이머에 AND 조건으로 연결시켜주면 된다.
6. 마치며
저번 스시벨트 쓸 때는 그래도 하루만에 끝났는데 이번 글은 쓰는데 사흘이 걸렸다. 이런 거 쓸 시간에 그냥 게임했으면 진작에 나우비스 벗어나서 다른 행성 찍었을 텐데, 내가 발견한 이 개쩌는 방법을 모두와 공유하고 싶다는 가슴 벅찬 감정이 나를 지배해 사흘 동안 게임 진행 안 하고 글만 썼다. 부디 여태까지의 내 노력이 너희들에게 그만한 가치가 있었으면 좋겠다.
본문에서도 말했듯이 내가 이제야 보라팩 생산하는 팩린이라서 이번에 추가된 로켓포탑이나 테슬라 포탑 같은 건 보지도 못했다. 그래서 기존 3종 포탑만 예시로 들었는데 아마 다른 포탑도 적용 방법은 똑같을 거다. 다른 부분이 있더라도 원리는 다들 알았을 테니 각자 응용해서 해결해보면 된다.
그리고 저번 스시벨트 댓글 보니까 일반적인 스시벨트라는 게 내가 쓴 방식이 아니라 벨트 빙빙 돌리고 투입기로 필터넣고 그런 방식을 말하는 것 같더라. 나는 그냥 3종 이상만 올리면 스시벨트인 줄 알았는데 다른 방법으로 만드는 거면 나도 좀 알려줘라. 나도 게임할 시간 투자해서 이런 글 쓰고 그러잖아. 좋은 건 같이 좀 알자. 직접 설명하기 귀찮으면 댓글에 설명글 링크라도 달아라. 물론 한국어 설명글로. 영어는 못 읽는다.
마지막으로 저번에도 말했지만 내가 설명한 방식이든 다른 방식이든 아예 안 쓰든 어쨌든 본인이 재밌게 즐길 수 있는 방식이 제일 좋은 방식이다. 그냥 발전소를 늘리고 대기전력 감수하면서 간단하게 설치하는 것도 훌륭한 방법이다. 기존 포탑배치를 개조하는 게 힘들고 스트레스 받을 것 같다면 그냥 이 글은 무시하고 각자의 방식으로 재밌게 즐기면 된다. 즐거운 팩토리오 해라.
레이저랑 테슬라타워 기지 둘둘했을때 전기 꽤 아낄 수 있을 거 같은데
그냥 맨앞 레이저타워만 상시켜둠으로 하구 얘 전기공격해서 전기소모 늘어날때 나머지 전부 다 켜는거로하면 되는거아님?
??? 포탑 전기 소모량을 감지 가능함?
맨 앞놈꺼는 독립된 태양광,축전기 몇개달아서 가동하고 그거 확 감소하는순간 축전기 감소량 읽어서 나머지 메인포대 작동시키면 되지않을까?
그거도 방법이네. 본인만의 팩토리오 조합법을 찾아낸 걸 축하한다
임마 머리 비상하네
씨발 레전드노;
테슬라 쓸때 ㅈㄴ 유용하겠네 이새끼 대기전력 미친듯이 퍼먹던데
와 캬 퍄
이글을보고보일러늘렸다
이글보고코바렉스돌렸다
진짜 개쩌네 ㄷㄷㄷㄷ
이정도면 노벨상 줘야된다고 생각함
"줘"
탄약/유체량과 변하는 값을 감지하려고, 수량 저장가능한 메모리셀과 기존신호를 입력후 끊어줄 릴레이회로, 사건 발생후 주기적으로 다시 입력해줄 타이머, 현재 탄약/유체량과 기존 메모리셀의 수량을 비교감지할 회로까지 만들고 있다가 아 이게 이렇게까지 할 일인가 머리싸메고 있었음. 마치 지금 내가 회로 할때 가장 문제여서 신경썼던게 틱차이로 인한 오류때문에 되려 틱 동기화를 어떻게든 맞추려고 신경쓰던 시기라서. 이런식으로 역으로 틱차이 이용해서 간단하게 구현하는게 참 좋아보이네.
위에 댓글쓴대로 뻘짓하는 대신 본문 참고해서 청사진 만들어봤어
https://gall.dcinside.com/m/factorio/94076