https://www.factorio.com/blog/post/fff-388
FFF #388 - 2.0을 위한 작은 것들
게시자 kovarex, raiguard, Klonan
2023-12-08
안녕하세요,
최근에 더 큰 것들을 보여드렸으니 이제 작은 것들도 보여드릴 차례입니다. 작은 것들이 제대로 작동하지 않으면 큰 것들이 그렇게 빛나지 않을 것이기 때문입니다!
수십억 년 동안 축적된 팩토리오의 가치 - raiguard
저희는 항상 지나간 틱 수를 추적하는 데 일반 32비트 부호 없는 정수로 충분하다고 생각했습니다. 초당 60개의 틱이 발생하므로 한 번의 게임 저장으로 2.2년 동안 계속 플레이할 수 있습니다. 하지만 팩토리오는 자동화에 관한 게임이기 때문에 누군가가 백그라운드에서 공장을 가동하고 결국 틱 카운터를 넘치게 하는 것은 불가피한 일이었습니다.
이건 고쳐야 합니다!
1.1 버전에서는 이미 틱 타입의 사용법을 클래스로 캡슐화하도록 통일했고, 기본 타입의 변경에 대한 대비를 어느 정도 마쳤습니다. 따라서 64비트 부호 없는 정수로의 전환이 생각보다 어렵지 않았고, 저장 파일 시간의 새로운 이론적 한계는 97억 년입니다.
이 변경은 게임 엔진 측면에서는 비교적 간단했지만, 모딩 API에는 몇 가지 문제가 발생했습니다. 팩토리오는 배정밀도 부동 소수점 숫자(더블)로 구현된 단일 숫자 유형이 있는 Lua 5.2를 사용합니다. 부동 소수점 숫자의 값이 커질수록 유형이 포함할 수 있는 세부 수준이 감소합니다. 더블이 완전한 정확도로 표현할 수 있는 최대 정수 값은 2^52 또는 237만 년의 틱 값입니다.
최신 버전의 Lua에는 완전한 정밀도를 허용하는 전용 정수 유형이 포함되어 있지만, 내부적으로 언어에 대한 수많은 수정 및 버그 수정이 이루어졌기 때문에 팩토리오의 Lua 버전을 업그레이드하는 것은 불가능합니다. 즉, Lua 스크립트는 2^52까지의 정확한 틱 값만 지정할 수 있으며, math.huge을 사용하여 "가능한 최대 틱"을 지정할 수 있습니다.
뭐, 200만 년이 지나서 버그 보고서가 올라올 때 쯤이면 저희는 이미 없겠죠?
(역주 : 뭔소린지 이해가 잘 안가서 대충 번역함. 오역 있을 수 있음)
시체 복구와 관련된 물류 요청 활성화 조정
사망 후 부활하면 시체를 찾기 전에 물건을 다시 공급받지 않도록 개인 요청이 비활성화되는 기능이 있습니다. 하지만 성가신 문제는 시체를 복구한 후 요청을 다시 활성화하는 것을 잊어버려서 무슨 일이 일어나고 있는지, 왜 물건이 공급되지 않는지 알아내야 한다는 것이었는데, 저희도 여러 번 겪었습니다.
성가신 모든 것을 자동화해야 했기 때문에 당연히 수정해야 했습니다. 이제 시체를 줍고나면 죽기 전의 설정이 복원됩니다(그 사이에 변경하지 않은 경우).
스마트 숫자 형식
"여기에 7.5개의 스택이 필요해"와 같이 상수값을 설정하고 싶을 때가 많은데, 수동으로 계산하는 것은 당연히 허용되지 않았습니다. 그래서 저희는 텍스트 필드에 수학식을 직접 입력할 수 있도록 만들었습니다.
무한 기술 비용을 정의하기 위해 수학 수식을 구문 분석하는 코드가 이미 있기 때문에 기본적으로 한 줄만 변경하면 되었습니다. 몇 가지 상수(1,000의 경우 k, 1,000,000의 경우 M 등)를 정의하고 플레이어가 확인하면 텍스트를 파싱하기만 하면 되었습니다. 즉, 다양한 종류의 작업을 수행할 수 있습니다:
- 10k
- 10*50k
- 10+50
- 10^6
등등
최대 범위 표시기
지하 벨트와 지하 파이프를 최적의 위치에 짓고 있는지 스스로 확인하기 위해 최대 거리를 지나쳐야 하는 것이 지금까지의 전형적인 건설 조작법이었습니다. 4까지 세는 것은 쉽지만, 더 높은 단계의 벨트는 더 복잡한 숫자(6, 8)를 가져오기 때문에 얼마나 멀리 도달하는지에 대한 부분이 시각적으로 직관적이지 않습니다.
이 솔루션은 너무 간단하고 훌륭해서 이 솔루션 없이 어떻게 살았을까 싶을 정도입니다. 지하 연결이 최대 거리에 도달하면 안심할 수 있는 녹색으로 변해 완벽한 거리에 도달했음을 즉시 알려줍니다.
이전: 최대치를 한칸 지났다가 다시 돌아와야합니다.
이후: 지하 연결의 최대거리에 도달하면 색상이 변경됩니다.
맵 태그 개선 사항
사용자 지정 맵 태그의 기능을 개선하는 데 시간을 들였습니다. 이제 피펫 키 바인딩을 사용하여 빠르게 드래그하고, 복사하고, 확대한 상태에서도 내려놓을 수 있어 완벽한 정렬이 가능해졌습니다.
세이브 정렬
이제 게임 불러오기/저장 창에 '마지막으로 수정한 시간'이 표시되고, 알파벳순과 최근순 정렬을 전환할 수 있는 버튼이 추가되었습니다.
램프 색상 수동 조정
공장의 분위기를 설정하거나 색상을 설정하기 위해 조합기를 설정하는 복잡한 과정을 거치지 않고도 사용자 지정 색상을 사용할 수 있어 좋습니다.
물론 현재의 회로망으로는 불가능한 다양한 색상을 구현할 수 있으므로 사람들이 이를 어떻게 활용할지 지켜보겠습니다 :)
지도에서 로봇의 색상
때때로 형편없는 개인용 건설 로봇이 방치되어 잊혀지는 일이 발생할 수 있습니다. 배터리가 금방 떨어지고 저전력 슬로우 모드로는 다시는 돌아올 수 없는 경우가 많기 때문이죠. 참 슬픈 운명이네요.
그래서 로봇 지도 시각화에 더 많은 색상을 추가했으며, 녹색은 여러분의 개인 로봇입니다. 이렇게 하면 잃어버린 영혼을 비교적 쉽게 찾을 수 있습니다. 그 외에도 물류 로봇이 배달하는 상황, 스파이더트론/다른 플레이어의 건설 로봇 등 다른 상황에 맞는 다른 색상도 있습니다.
어떤 색이 무슨 로봇을 의미하는지 맞춰보세요!
더 스마트한 해체 계획 + 강제 건설
절벽 폭발물은 게임 시작부터 잠금 해제되지 않으며, 확장팩에서는 더욱 나중에 열립니다. 절벽 위에 강제 건설(역주: 쉬프트 누르면서 건설)할 때 절벽이 무의미하게 해체 대상으로 표시되는 것을 방지하기 위해, 절벽 폭발물을 연구한 후에만 절벽이 해체 대상으로 표시되도록 변경했습니다.
절벽폭발물을 잠금 해제하지 않은 경우 절벽은 해체 시 무시됩니다.
이는 초강력 건설에도 적용되며, 매립 연구 이전에는 매립을 시도하지 않습니다.
언제나 그렇듯이 평소 자주 이용하는 장소에서 여러분의 의견을 알려주세요.
미친 회로에 수식은 미친기능인데?
600만 UPS를 달성하고 20년만 기다리면 새로운 버그 리포트를 할 수 있겠군
자하벨트,파이프는 저거말고 그냥 최대거리 쪽에 청사진 비슷하게 하거나 해당 칸 땅을 밝혀주는 식으로 최대거리를 바로 알수 있게 하는게 나을거 같은데. 여전히 지하벨트 깔때 최대거리 맞나 천천히 확인하는건 크게 개선 안될듯
천천히 확인하는건 그대로더라도 최대거리인지 확인하기위해 최대거리밖으로나가봐야하는게 묘하다고 생각한듯. - dc App
처음에 나온내용이 ups존나 좋아진다는 뜻은 아니지?
아님
시간 관련 바이트 수를 두배 먹는다는거니까 아주아주 조금 더 메모리 차지하겠지
대신 니가 2년동안 팩토리오을 플레이해도 튕기지 않음
처음 나온 뜻은 기존 팩토리오 틱 계산방식이 4byte 정수형(integer)였기 떄문에 2.2년이 경과하면 이게 망가지는 결과가 나왔음. 하지만, 이걸 추후에 수정하기 위해 미리 클래스로 캡슐화했고, 이번에 8byte 정수형(unsigned long long integer/0~2^64-1)로 바꿨다. 이를 단순 계산하면 97억년이나 팩토리오를 실행시켜도 문제가 없다.
근데 팩토리오 엔진을 이루는 언어는 C++인데, 모드나 기타 여러가지 위에 스크립트 언어로 따로 굴러가는 Lua라는 언어가 있음. 근데 여기서는 변수의 타입지정이 안되고 한가지(double형 소수)로 이루어져 있는데, 이게 2^52까지는 정확히 표현 되나, 이후에는 오차값이 생길 수 있는 자료형임. 그래서 이걸 Math.huge라는 함수를 이용해서 최대값을 지정했고, 이 값이 200만년정도에 해당하니까 200만년 후에 버그 리포트가 올라올 수 있는데, 그땐 우리없으니까 아무튼 알바 아님 이런 소리임
멀티플레이 서버 시간순으로 정렬하면 만시간 넘은것들 가끔씩 보일때 있는데. 작년 11월쯤에 하나가 2.2년 한계 넘어서 터진적 있을거임
가지무침 ㅜㅠㅠ
마지막건 조금 아쉽네 초반에 미리 청사진 그려놓는 용도로 절벽 부서지던 말던 청사진 깔아놓는 경우가 있긴해서
인터페이스 설정에서 온오프 가능하게 해주지 않을까 싶은데
수식 넣는 거 레전드