결론부터 말하자면
생산모듈 모드+우주선 타고다니기<<엄청 쉽게 성공함. 글 맨끝부분에 짧게 설명할거임
이온 엔진만 생산모듈 제외시키기<<실패함
이 글 내용의 대부분은 예외설정 하려고 시도하다가 실패한 것에 관한 것이다
사실 이 글 처음 쓸때까지만 해도 우주선 못탔는데
글 쓰다보니 엄청 간단한 방법이 하나 떠올라서 해봤더니 잘~됨
근데 여태껏 글 쓴게 아까우니 실패한거여도 그냥 글 올림
다들 우주시대 즐기고있고 우탐모 하는사람은 나밖에 없는거같아 약간 외롭지만?
아무튼 글 시작한다
제미나이한테 물어봤다
호환되지 않는 모드 추가/제외하거나 버전 호환 관련해서는 내 머리만으로도 가능했는데
특정 아이템만 예외설정하는 코드는..회로도 제대로 못다루는 내 머리로는 도저히 못짜겠어서 ㅋㅋ
근데 제미나이가 옛날버전 팩토리오 코드를 짜준건지 뭐 제대로 못짠건지 아무튼 잘 안됨
그래도 혹시 모딩 고수 있을지 모르니까
내가 아는 팩토리오 커뮤니티는 여기밖에 없어서 일단 내가 시도하고 고민했던 내용에 관해서 글써봄
에렌델이 금지해놓은 영역을 뚫으려고 시도하는거라 바람직하진 않지만 좀 도움을 받고싶음
엄청난 장문이 될 것 같은데 글 이해가 잘 안되면 그냥 도전하다 실패해서 일기쓰듯 푸념 늘어놓은거라고 생각해도됨
팩토리오 어느정도 깊게 파고든 사람이라면 다 알겠지만
팩토리오에는 아이템의 type(이하 타입)이 굉장히 많음
아이템 prototype name이랑 아이템 타입을 보는 방법은 아이템에 커서 올리고 컨트롤+쉬프트+F 누르면 그 구조물의 이름이랑 타입을 확인할 수 있음
아래는 내가 이것저것 확인해본 타입 목록임
furnace(용광로), assembling-machine(조립 기계), inserter(투입기), transport-belt(운송벨트), underground-belt(지하벨트), splitter(분배기), loader(적재기), pipe(파이프), pipe-to-ground(지하파이프), electric-pole(전신주), container(상자), resource(광석이나 원유, 이건 내가 설치한게 아니고 자연적으로 있는거지만 확인할 수 있더라), mining-drill(채굴기), offshore-pump(해안펌프), boiler(물로 증기 생산하는 건물), generator(증기로 전기 생산하는 건물), reactor(원자로), lab(연구소), roboport(로보포트), item(인벤토리 속 아이템, 건물이든 벨트든 조립기계든 걍 인벤토리에 있으면 item타입이다), recipe(제작법), blueprint(청사진), beacon(신호기)
등등..이거 말고도 엄청나게 많다
어느 정도 예상 가능하지?
inserter 타입의 아이템은 화력투입기, 투입기, 빠른투입기, 긴팔투입기, 묶음투입기 등이 있을거임
그리고 assembling-machine은 조립기계 뿐만 아니라 제작법을 설정할 수 있는 모든 건물들을 다 포함함
예를 들어 정유공장, 화학공장은 조립기계가 아니지만 제작법 설정해서 생산품을 만들어내는 건물이기 때문에 assembling-machine 타입에 해당한다
특이하게도, 모드로 추가되는 산업용광로는 용광로라서 furnace 타입일 것 같지만 제작법을 설정해서 제련하는 건물이라서 얄짤없이 assembling-machine 타입이다
furnace 타입은 제작법 선택이 없는 생산건물임
저 수많은 타입들 중에 모듈 슬롯이 있는 타입은 딱 5가지임
furnace, assembling-machine, beacon, lab, mining-drill 인데 일단 이렇다는 사실만 알아두자
서론이 길었다
내가 이 글을 쓴 이유는 우주 건물에 생산모듈을 박을 수 있게 해주는 생산모듈 모드를 사용하면서도, 우주선을 타고다닐 수 있게 하려다가 잘 안돼서임
왜냐하면 생산모듈 모드를 넣으면 이온 엔진이 격벽 판정이 아니게 돼버려서 무결성이 유효하지 않다고 뜨거든
내가 우탐모 1회차를 팩토리오 버전 1.1에서 했는데 이때도 난 생산모듈 모드를 썼었음
근데 그때는 이온엔진이 격벽으로 인식돼서 우주선도 잘만 타고다녔음
아마 팩토리오가 2.0으로 업데이트되고 에렌델도 2.0에 맞춰서 우탐모를 업데이트하는 과정에서 막힌것으로 보인다
생산모듈 모드는 여전히 업데이트 안돼서 그런걸수도 있고 아무튼
참고로 생산모듈 모드는 인게임에서 다운받을 수 없고(검색해도 안나옴) 직접 팩토리오 공홈 들어가서 검색해서 다운받아야 함
모드 이름이랑 적용법은 밑에서 설명할거임
내가 이전에 팩갤에 쓴 글을 보면 알겠지만
이온 엔진이 격벽으로 인식되지 않는 이유가
생산모듈 모드를 넣으면 이온엔진이 겉모습만 똑같지 전혀 다른 아이템으로 바뀌기 때문임
링크넣기 귀찮아서 스샷 추가해서 이전 글 내용 좀 더 보충해서 다시 설명함
이온엔진이 다른 아이템으로 바뀐다는게 무슨 말이냐면
생산모듈 모드를 넣지 않은 순정 상태일때는
보다시피 아이템창에 있을 때 prototype name이 "se-spaceship-ion-engine" 이고
실제로 설치했을 때에도 prototype name이 "se-spaceship-ion-engine" 으로 동일함
참고로 타입이 furnace임
제작법을 설정하지 않는 생산건물이라는 뜻인데..모듈 칸이 없네?
그리고 생산모듈 모드를 넣고 나면
아이템창에 있을 때는 prototype name이 "se-spaceship-ion-engine" 이지만
실제로 설치하면 prototype name이 "se-spaceship-ion-engine-spaced" 로 변경된 것을 확인할 수 있다
미니맵 아래 아이템 정보에서도
우주선 이온 엔진(우주)로 바뀌고 밑에 빨간 글씨로 설명이 추가됨
즉 생긴거만 똑같지 그냥 다른 아이템임
참고로 이온엔진 말고도 우주에 설치하는 모든 건물들이 다 저렇게 변한다
신호기든 방사선실험실이든 우주제조소든 다 아이템 뒤에 (우주)가 붙음
이걸 통해 알 수 있는 사실은
(우주)가 붙은 아이템은 생산모듈을 박을 수 있다는거임
근데 이 우주선 이온 엔진(우주) 아이템은 furnace 타입이지만 모듈 칸이 존재하지 않음에도 불구하고 우주에 설치하는 건물이라 그런지 뒤에 (우주)가 붙음
그래서 완전히 다른 아이템이라 우주선 무결성 검사에서 격벽으로 인식이 되지 않음
뭔말알? 생산모듈 모드를 빼면 이온엔진(se-spaceship-ion-engine)이 격벽 판정이라 우주선을 정상적으로 탈 수 있지만
생산모듈 모드를 넣으면 이온엔진(se-spaceship-ion-engine-spaced)이 격벽 판정이 아니게 되어 무결성 검사에서 유효하지 않다고 뜸
그렇다고 이온엔진 뒤쪽까지 우주선 벽으로 둘러싸면 무결성 검사는 유효하지만 속도가 아예 안나옴
자 여기까지가 이온 엔진의 격벽 판정이 바뀌는 이유에 대한 설명이었고
어쨌든 우주선을 탈려면 생산모듈 모드를 빼야되는 상황인데
내가 생산모듈 모드를 적용하면서도 저 바뀐 이온엔진이 격벽으로 인식되도록 모드를 건드리려고 도전했음 근데 실패함..
글 쓰는김에 내가 생산모듈 모드를 어떻게 적용했는지, 우탐모랑 호환 안되는 생산모듈 모드를 어떻게 강제로 적용했는지에 대해서도 설명하겠음
내가 사용한 생산모듈 모드는 UnlimitedProductivity_1.4.3임
1.1에서는 인게임 메인화면 모드 포털에서 다운받을 수 있었으나, 모더가 팩토리오를 접었는지 업데이트가 되질 않고 있음
그래서 팩토리오 2.0에서는 호환이 안됨
그래도 성능은 좋으니 이 모드를 먼저 호환되게 만들어야 함
성능이 좋아서 그런지 우탐모 제작자인 에렌델이 직접 이 모드를 못쓰게 막아놓음
먼저 우탐모랑 호환되게 만들기 위해서 space-exploration_0.7.39.zip 압축 풀면 info.json이 있을거임
이 파일을 건드려서 호환되지 않는 모드를 호환되게 만들거나, 필수 모드를 해제할 수도 있다
이걸 메모장으로 열어서 살짝 내리면
"! 로 시작하는 부분이 쫙 나올텐데
이게 에렌델이 막아놓은 모드들임
좀 더 내리다 보면 "! UnlimitedProductivity" 가 나옴
저 UnlimitedProductivity 부분을 아무렇게나 변경하면 됨
난 그냥 Unlimited1Productivity 로 바꿈 중간에 1 넣은거임
뭐 삭제해도 되고 아무튼 UnlimitedProductivity 라는 단어만 아니게 만들면 됨
이런 식으로 우탐모 말고도 다른 모드 서로 호환 안되는것도 호환되게 만들 수 있다
또는, 필수 모드(ex 개같은 로봇충돌모드)를 해제할 수도 있는데 알아서 잘 해보시고
그럼 우탐모랑은 호환되게 만든거임
이제 팩토리오 2.0이랑 호환되게 만들고
이온 엔진을 생산모듈 적용 대상에서 예외로 설정해야 함<<이걸 실패한거임
우선 팩토리오랑 호환되게 만들어보자
UnlimitedProductivity_1.4.3.zip파일 뜯어보면 폴더 안에 파일 4개가 있음
info.json
control.lua
settings.lua
data-final-fixes.lua
info.json은 모드 호환 관련해서 내가 건드려야 할 파일이고
control.lua는 게임 도중에 실시간으로 발생하는 이벤트를 처리하는 스크립트
settings.lua는 모드 설정에서 체크박스나 수치조정을 정의하는 스크립트
data-final-fixes.lua는 기계에 생산모듈을 허용할지 말지 결정하는 스크립트
여기서 control.lua랑 settings.lua는 건드릴 필요가 없음
내가 건드릴 파일은 info.json과 data-final-fixes.lua 두개임
info.json은 너무 간단해서 스샷도 안찍고 걍 글로 설명함
"factorio_version": "1.1" 이 부분에서 1.1을 2.0으로 바꾸면 그냥 호환됨
난 평소에 여기까지만 하고 우탐모를 진행중이었는데
우주선 이온 엔진이 격벽으로 인식되지 않는 문제에 부딪혀서 이걸 뚫으려고 도전한거임
수정할 필요는 없지만 settings.lua를 열어봤음
settings.lua는 메인화면 모드 설정-시작에서 체크박스나 수치조정을 정의한다고 했음
천천히 내려보니까 furnace타입(제작법 선택이 없는 생산 건물)인 모든 아이템들에 생산모듈을 적용한다는 부분이 있음
그리고 내가 수정해야 할 lua는 data-final-fixes.lua임
visual studio code로 lua를 열어보니까 내용이 그리 길진 않음 90줄정도?
온통 영어라서 뭔말인지는 모르겠지만 아무튼 제미나이한테 스크립트 싹다 복사해서 알려주고 se-spaceship-ion-engine이랑 se-spaceship-ion-engine-spaced 두 아이템을 생산모듈 적용대상에서 예외설정 해달라고 했음
제미나이가 시킨 대로 코드 복사해서 해당부분에 붙여넣기하고 다시 압축해서 모드 폴더에 덮어쓰기했는데
..안됨
모드 적용실수한건 아님. 다른 우주건물들에 생산모듈 잘 박힘
그래서 내가 생각해본 해결법은 현재 3가지가 있음
1. 이온 엔진의 타입이 furnace니까 furnace 타입 아이템 전체에 생산모듈 모드가 적용되지 않게 하는것. 이건 스크립트 수정할 필요 없이 모드 설정에서 "용광로에 모든 모듈효과 적용" 체크 해제하면 됨
우주 건물 중에 furnace 타입과 비슷한 역할을 하는 열역학 실험실은 제작법을 설정하는 생산건물이라 assembling-machine 타입임
열역학 실험실 말고도 우주에 설치하는 모든 건물들이 싹다 assembling-machine 타입이다
그래서 furnace 타입 건물 중에서 모듈 슬롯이 존재하는 건물이 사실상 전기용광로밖에 없음
그리고 애초에 전기용광로는 생산모듈 모드를 넣지 않더라도 생산모듈을 박을 수 있음
이게 가장 간단한 해결방법. 이온엔진도 격벽으로 인식됨
현재 난 이 방법으로 우주선 타고다님
이게 글 쓰면서 settings.lua 확인하면서 떠오른 해결법인데 다행히 해결이 돼서 기분은 좋은데..
뭔가 코딩으로 간지나게 뚫고 싶었는데 그러지 못해서 약간 아쉽다 정도?
2. 이온엔진만 생산모듈 적용 안되게 하는거 재도전
3. 우탐모 스크립트에서 se-spaceship-ion-engine 격벽 판정 관련 코드를 찾아서 그걸 se-spaceship-ion-engine-spaced 에도 적용되게 코드를 추가하는것
이게 진짜 성공하면 도파민 터질거같은데 너무 귀찮아져서 나중에 진짜 심심할때 다시 도전해봄
살면서 코딩이라곤 대학교 때 파이썬이랑 C 찔끔 해본게 전부여서..그마저도 교양으로 듣고 제대로 공부 안해서 아예 코딩을 어케 해야할지 감도 안잡힘
이거 간지나게 뚫는거 도전해볼 팩붕이 있음?
왜 이런짓 하는 거야
1번이 충분히 간지나보이는데? 원래 고수는 최소한의 작업으로 최대한의 안정성과 롤백(복구) 가능성을 확보함. 임의의 스크립트 변조보다 그냥 furnace를 딸깍 빼는게 간단한 해결책인듯. 2번은 data final fixes 에 이온엔진 부분 찾아서 기존을 spaced 로 치환하라고 되어있는 정의 라인을 주석처리하면 되지 않을까? 내가 파일 열어본건 아니지만 공용 펑션은 따로있고 아마 적용목록 리스트랑 대응목록 위주로 정리되어있을것 같음 3번은 좀 더 일이 커지는것 같은데, 격벽관련이 타입이나 엔티티 리스트업인지 어떤식인지 찾아봐야 할것 같은데, 가장 최종적인 수정법이긴 하지만 멀쩡한 우탐모를 건드려야 하니 가장 리스크가 큰듯. 생산모듈모드는 업뎃이라도 끊켰지 우탐모는...
글쓴이임. 원래 data final fixes 안에 이온엔진 관련 부분이 없었고 그냥 건물들에 생산모듈을 허용하라는 내용 정도만 있었음. 제미나이가 se-spaceship-ion-engine을 변수로 추가해서 그걸 lua 문법에 맞게 예외설정하도록 코드를 짜줬음. 한국어로 주석까지 달아서 이해하기 쉽게 만들어줌. 보니까 괜찮은거같아서 그대로 복붙했는데 안된거임..
ai한테 먼저 가서 물어보고오는 사람들 특이 항상 이럼, ㅈㄴ 장황하고 알맹이도 없이 글만 길음 결국 남의 모드에서 막아둔거 딴 모드로 억지로 뚫겠다고 낑낑대다 해결 반밖에 못해서는 ai갖고 어케 해볼라다가 못했다 좋은방법없냐 그거아님? 그럼 이 질문도 제미나이한테 가서 물어보든지 해. 그럼 "아, 이제 모든 맥락이 파악되었네요! @&@₩^@^+&+&" 하면서 쓸데없는거나 또 떠들겠지 - dc App
모딩 아는 관점에서 읽어보면 나름 잘 설명했는데
쓸데없는거 떠드니까 여기 와서 물어보는거잖아 좀 닥쳐 병신장애인년아
일단 우탐모의 info.json에서 "! UnlimitedProductivity" 를 "! Unlimited1Productivity" 이걸로 바꾸는건 좀 비추천함 우탐모 업데이트 나올때마다 저거 계속 수정해줄거임? 그럴거 아니면 그냥 UnlimitedProductivity_1.4.3 이 모드를 Unlimited1Productivity_1.4.3 로 이름 바꾸는게 나을듯. 그럼 우탐모 업뎃이랑 상관 없으니깐
최종 로딩후에 se-spaceship-ion-engine-spaced가 추가된상태면 이건 이미 무언가가 망한 상태라고 보면 될 것 같음 정상적이라면 -spaced 개체자체는 존재하지 않아야함. -spaced가 있는 상태에서 그걸 생산모듈 못넣게 바꿔봤자 이미 우탐모는 그 엔진에 기록을 해뒀기 떄문에 정상적으로 동작하지 않음 아마 모드 적용 순서가 우탐모->생산모듈모드 순서로 적용이 되어서 그럴것 같은데 생산모듈모드->우탐모 순서로 동작하게 한다던지 이런 서순문제가 엮여있을 것 같음 의존성 없는 모드끼리는 abc 순서대로 로딩되기때문에 아마 우탐모쪽이 먼저 로딩이 되고있을거임. 순서를 바꾸기 위해선 생산모듈모드의 이름자체를 S보다 앞문자로 시작하거나 해야할듯 아직 코드를 자세히 보진않아서 어디까지나 추정
테스트 해보니 위에 설명을 좀 잘못한것 같은데 일단 엔진에 대한 별도 처리를 하지 않았을 경우에 생산모듈모드->우탐모 순서대로 로딩되면 이온엔진이 생산모듈이 박히게 바뀜->우탐모가 그걸 인식하고 이온엔진의 -spaced버전을 생성함 -> FAIL!!! 그런데 우탐모->생산모듈모드 순서대로 로딩되면 이경우에는 우탐모가 먼저 검사를 한 이후에 -spaced가 안생기고 그 이후에 생산모듈을 적용가능하게 바꿔버려서 문제가 안되는것 같음 그런데 의존성을 크게 건드린게 아니라면 우탐모->생산모듈모드 순서로 로딩되는게 정상같거든? 그래서 나는 실제로 테스트 해봐도 걍 문제 없이 잘 돌아감
한번 억지로 로딩순서 바꿔서 생산모듈모드->우탐모 순서대로 로딩하게도 해봤는데 이때는 글이랑 같은 증상이 나오는걸 확인했음 설사 그렇다고 하더라도 for _,entity in pairs(data.raw[category]) do entity.allowed_effects = {"consumption", "speed", "pollution","productivity"} end 이부분을
for _,entity in pairs(data.raw[category]) do if not(name == "furnace" and string.find(entity.name,"-engine")) then entity.allowed_effects = {"consumption", "speed", "pollution","productivity"} end end 이렇게 바꿨을때는 정상적으로 동작하는걸 확인했음 너가 안됐던 이유는 코드 수정을 잘못했다거나 뭐 그런거 아닐까? 코드를 봐야 알듯
하나 궁금한게 생산모듈모드의 info.json에 아마 "dependencies": ["base >= 1.1.0", "(?) deadlock-experiments", "? space-exploration", "(?) pyalienlife"] 이렇게 의존성 걸려 있었을텐데 저걸 제거하거나 수정하거나했음? 저게 남아있었다면 무조건 우탐모 후에 로딩되면서 문제 안생겼을것같거든