우탐모 우주선이 어떤 식으로 동작하는지 알아보기 위해 코드를 뜯어보던중 흥미로운 부분이 눈에 들어왔음
우주선의 속도 계산은 이런 식으로 이루어짐
efficiency(엔진 배치 보너스)는 이렇게 발사할 때 뜨는 값이고 뒤가 막혀있지 않은 구조라면 100%=1.0 임
thrust는 엔진 별로 발생 시킬 수 있는 추력이고, 이온 엔진의 경우 저 값은 50임
energy/max_energy는 엔진이 받고 있는 전력량임
전력 공급이 충분하지 않다면 전력량이 100%를 달성하지 못할 거고 이럴 때는 그에 비례해서 가속력이 줄어들게 됨
minimum_mass(100)+integrity_stress는 우주선의 하중임
integrity_stesss는 선체 하중과 보관소 하중 중에 무거운 쪽을 사용함
speed_taper(150)는 속도가 빨라질수록 추가 가속도에 제한을 거는 용도임
만약 현재 speed가 0이라면 speed_taper/(speed_taper+speed) = 150/(150+0) = 1.0이겠지만
현재 speed가 150이라면 150/(150+150) = 0.5가 되어 받는 가속이 절반이 됨
time_passed는 20임
저 스피드 연산을 20틱에 한번 하기 때문에 그걸 보정하기 위해 20을 곱해주게 됨
만약 설계한 우주선 상태가 아래와 같을 경우
엔진배치보너스 = 100% = 1.0
이온엔진 2기=추력 100
전력량 = 100% = 1.0
보관소하중=선체하중=200
현재속도 = 150
이 때 20틱이 지난 다음의 속도는
1 * (100) * 1 / (100+200) * 150/(150+150) * 20 = 20/6 = 3.3333
속도 3.3333이 늘어서 153.3333이 된다
엔진의 가속을 계산한 다음 공?기 저항에 의한 감속도 계산을 하긴 해야 하지만 일단 이 글에서 말하고 싶은건 가속에 관한거라서 다음에 말하는 걸로 하고
중요한 건 저 연산을 20틱에 한번만 수행한다는 것이다
여기서 든 생각
이온 엔진은 한 기당 전기를 10MW나 빨아 먹는데 그렇다면 20틱중 1틱만 전기를 공급하고 19틱은 전기를 끊어버리면 어떻게 될까?
간단하게 회로를 만들었음
왼쪽 조합기는 0~19 순환하는 카운터고
그 출력은 오른쪽 조합기로 들어가는데 저 조합기는 신호 값이 12(이 값은 조율해야함) 일 때만 신호1을 출력하고
그 신호는전원 스위치로 들어가서 신호 값이 1일 때만 전원 스위치가 작동하도록 되어있음
전원 스위치는 20틱 중 단 1틱만 연결되어서 전기가 엔진까지 흘러갈 수 있도록 한다
세밀한 제어를 하기위해서 부속 전신주를 사용하였음
엔진을 20틱마다 단 한번씩 동작을 하게 해야 하는데 이게 모드 스크립트에서 엔진 가동 여부를 확인하는 타이밍과 동일한 타이밍에 이루어져야하기 때문에
조합기 설정 값을 틱 단위로 조절하여 정확한 타이밍에 엔진이 동작하게 해야 함
그렇지 않으면 엔진이깜빡거리긴 하지만 스크립트는 계속 엔진이 꺼져있는 것으로 판정하기 때문에 가속을 받지 못한다
위 움짤에서는 그 값이 12인거고, 12로 설정하자마자 우주선이 점점 가속하는 것을 볼 수 있었음
전력 그래프
엔진이 1초에 3번씩 틱틱 대는걸 볼 수 있고
평균 전력이 1MW 정도인 것을 볼 수 있음
현재 이온엔진이 2기라서 원래는 20MW는 소모되어야 하는데 1/20 값인 1MW만 나오는 것
정상적으로 주행한다면이렇게 20MW가 나와야 한다
실험에 사용한 우주선은 포엔스트라에서 주워온 나퀴움 축전기 5개가 설치 되어있는데
250MJ*5= 1.25GJ의 전력량이 있으면 이렇게 꼼수를 써서 1MW로 주행할 경우 추가 전력원 없이도 1000초 이상을 주행을 할 수 있게 된다
정상 전력인 20MW로 주행한다면 1분만 주행해도 방전이 날테지만
물론 전력 측면에서 뿐만 아니라 연료 측면에서 봐도 연료 사용량 또한 1/20로 줄어들기 때문에
전기 덜 먹는 로켓 엔진이나 반물질 엔진을 사용할 때도 이득을 볼 수 있게 됨
혹시나 해서 해본건데 진짜 먹혀들여서 꽤 재미있는 실험이였음ㅋㅋ
우주선 연산에 사용하는 UPS의 소모를 줄이기 위해 20틱마다 연산하는 점을 악용 한건데 그냥 이런게 된다~정도로만 재미로 보고 실제로는 제대로 타고 다니자 ㅋㅋ
램타이밍 맞추는줄 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ - dc App
오.. 그럼 축전지 최대 출력을 피크 전력에 맞춰야 되는건가
홀뮴축전기가 5MW, 나퀴움축전기가 25MW 홀뮴으로는 이온엔진1개당 축전기2개씩 필요하고, 나퀴움으로는 축전기1개당 이온엔진2.5개를 커버할 수 있네
ㅋㅋㅋㅋㅋㅋㅋㅋ재밌네
ㅈㄴ웃기네ㅋㅋㅋ
ㅋㅋㅋㅋ 미친놈추
저 12틱 정하는거 운항 시작 할때마다 새롭게 지정해줘야 하는거임? 아니면 게임 플레이 하면서 한번 정해주면 그이후 자동 왕복 시킬때 멈춤 없이 돌아감?
암튼 개쩌는 얍삽이를 알아 냈네.. 나 이런거 너무 좋음 ㅋㅋㅋㅋㅋㅋㅋ 이온전력돼지 이렇게 라도 초반에 활용해야지 ㅋ.ㅋ
카운터에 손을 대지 않는다면 가장 처음에만 잡아주면 됨 카운터를 재설치한다거나 하면 다시 찾아줘야하고
우주선 발진하거나 할 때 표면 이동하는건 재설치판정인지 아닌지 긴가민가 하네 실험을 착륙없이 왔다갔다하기만 해본거라 착륙할때는 꼬일수도 있을것 같기도 함
변태같은 응용이네 ㅋㅋㅋㅋ 개발자한테도 보여줘봐 무슨반응일지 궁금하네
영어 대화 무서워ㅋㅋ
캬 ㅋㅋㅋㅋ
미친 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 재밌다 ㅋㅋㅋ 이온엔진 전기 너무 많이먹어서 사실상 최대속도도 늘어난거나 마찬가지겟지?
전기 아끼는 만큼 이온엔진을 더 도배해버리면 최대속도도 늘긴하겠네 ㅋㅋ
아 그리고 12틱 알아내는것도 자동으로 할수있을듯
어떻게함?
20틱 주기로 작동하는 다른무언가가 있고 그 결과를 회로로 모니터링할 수 있다면 그거 이용해서 자동으로 싱크를 맞출 수는 있을것 같음 당장 계기판에서 속도값만 읽어다가 사용해도 될듯하기도 하고
미친놈인데? ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 와 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
와 세상에 미친ㅋㅋㅋㅋㅋㅋ 리스펙입니다
20틱마다 펄스 쏘는 조합기를 모드로 하나 만들면 좋지않을까
걍 바닐라로도 조합기 한갠데 뭐.. - dc App
게임 오픈소스인가요?? 저도 공부용으로 코드 받아보고싶은데.
게임의 엔진 자체는 오픈이 아니지만 lua를 사용하는 모드들은 다 오픈되어있음
바닐라 또한 base라는 이름의 모드이기 때문에 게임 설치 폴더가면 코드들 잔뜩 들어있고 아니면
https://github.com/wube/factorio-data
깃헙에도 있음
일반 모드의 경우에는 압축 풀면 다 나옴
아 우탐모 소스코드군요 본문을 잘못읽었니요 감사합니다
개추
에렌델 이거보고 틱카운트에 랜덤걸러감
19~21틱 사이에 랜덤으로 동작하게만해도 꼼수 어려워지긴 할듯ㅋㅋㅋ
와 이렇게 간단하게 막을수 있구나 당연히 연산을 매 틱마다 해여할거라고 생각했는데ㄷㄷ 다들 엄청 똑똑한 사람들이네
진짜 미친놈이다 ㅋㅋ
방귀 뿡뿡 뀌면서 날아가는거구나 ㄷㄷ