https://wiki.factorio.com/Tutorial:Modding_tutorial
모딩 개요 튜토리얼
공식 api 정보 제공하는 사이트.
https://wiki.factorio.com/Data.raw
바닐라 데이터 명칭 정리되어있어서 자주 찾아봄
https://wiki.factorio.com/Console
콘솔 명령어 가이드 대충 있음
https://wiki.factorio.com/Rich_text
문자열 변수에 그대로 적용할 수 있다.
제작시 사용하는 언어는 lua이므로 텍스트 편집기는 좀 좋은거 쓰고, lua syntax 하이라이트 기능이 있으면 꼭 써라. 편하다.
lua 관련 팁은 구글링 하면 많이 나오니까 문법에서 막히면 검색해서 따라하면 다 해결됨.
일단 정확한 용어 구분을 해야겠다.
- 모드(mod)라고 부르는건 raw_data를 편집해서 prototype을 새로 추가하거나 변형해서 패키지로 만든거다. 게임규칙에 영향을 주는 스크립트도 넣을 수 있음.
- 시나리오(scenario)라고 부르는건 정해진(게임내에서 조작불가. 읽기만 가능) raw_data와 prototype들을 가지고 새로운 맵을 만들거나 새로운 게임규칙을 설계해서 넣은 세이브파일의 시작 원본이다.
뭐가 만들고 싶은지는 잘 생각해보자.
나는 "모드"는 안만들고 "시나리오"를 만드는 중이다. 새로운 게임 룰이 적용된 맵을 설계하고 있지.
뭔가 새로운 무기나 레시피, 아이템 같은걸 만들어서 게임을 다채롭게 만들고 싶다면 그건 모드다.
모드에서도 기존의 맵파일에 영향을 주는 코드를 삽입해서 게임룰에 변화를 줄 수도 있긴하다.
그렇게 생각하면 모드가 기능상 시나리오의 상위호환이라고 생각할 수도 있긴하다. 모드는 범용성이 있고, 시나리오는 특정 맵만 만드는건데, 뭘 하려는지에 따라서 전문적인 분야가 다름.
모드에 기존 맵을 완전히 "시나리오화"하는 기능을 넣을 수도 있지만 그러면 그 모드는 범용성이 사라지겠지. 아무 맵이나 죄다 같은 시나리오처럼 만들어버릴테니까.
모드는 기존 맵의 일부 기능을 변화시키는 정도만 할 때 만들고, 시나리오는 완전히 맵의 게임규칙에만 집중한거임.
특정 시나리오만을 위한 모드를 따로 만드는 사람들도 있긴 함.
그리고 모드는 조금만 변화를 적용하려면 게임을 통째로 껐다켜야해서 바닐라의 시나리오만 선호하는 사람이 많음.
api 사이트에서
모드를 만든다면 tutorial:mod-settings 도 읽어보고 바닐라 시나리오만 만든다면 딱히 필요없고
초록색 동그라미 친건 꼭 숙지하고 넘어가고.
나머진 사전식으로 정리된거라 필요한거 찾아보면 됨
디버그 정보를 볼 수 있는 인게임 단축키
/editor 같은 명령어를 맵 제작이 아닌 "테스트 용도로" 많이 쓰게되고,
시나리오 편집으로 지도를 편집해서 저장한 지형이나 엔티티 데이터 같은건 시나리오폴더 안에 생성된 blueprint.zip 파일안에 저장된다.
blueprint.zip 파일이 없는 시나리오는 시작시 시드 나 지형생성 설정값을 임의로 지정해 줄 수 있음.
모드는 안만들어봐서 자세히는 모르지만 모드는 주로 raw_data & prototype을 추가해주기 위해 존재함
새로운 이미지나 사운드도 넣을 수 있고, 일부 각종 변수는 모드로만 변경할 수 있음.
모드 제작은 공식 위키를 참조하는게 좋음.
시나리오는 게임을 플레이하는 도중에 벌어지는 일만 손댈 수 있으므로 raw_data나 prototype은 편집은 못함.
lua-api 사이트에 나오는 모든건 게임을 플레이하는 도중에 조작할 수 있는 것들이 나열되어 있음.
모드 제작시에는 참고정도만 될 듯.
게임 규칙을 바닐라와 다르게 복잡하게 하려는 시나리오를 만들려면 api사이트를 만드는 동안 계속 켜놓고 있게된다...
게임내에서 `를 누르고 채팅할 때 쓰는 콘솔에
/c lua커맨드는 스니펫으로 자주 쓰면 좋음.
game.print(... 같이 결과를 게임화면에 출력해주는 함수는 디버그에서 표시를 안해주는 각종 파라메터를 점검할 때 요긴하게 쓰임
한줄에 여러개 출력하려면
game.print{"", 값1, 값2, 값3 ...} 형태로, 괄호( 대신에 중괄호{ 써서 리스트변수로 넘겨줘야함. 리스트변수의 첫번째 값을 무조건 ""를 써야함.
""안에 다른 값이 있으면 그 값을 locale 폴더안의 번역문자열 키 중에 찾는다.
https://wiki.factorio.com/Tutorial:Localisation 현지화 포함한 텍스트 출력 기능 참조.
/c 로 lua 스니펫을 입력할 땐, 줄바꿈이 포함된 문자열을 복붙하는 경우 줄바꿈이 공백으로 전환되는데, lua문법상 문제없으니 걍 실행하면 됨.
/editor에는 lua 스니펫을 저장해두고 실행할 수 있는 ui도 있다.
뭔가 크래시가 나서 에러가 뜨면 에러 내용을 찬찬히 다 읽어보는 습관을 들이는게 좋다.
시나리오나 모드를 만들다보면 멀티 참가자의 desync가 일어나거나,
맵을 저장했다 다시 불러왔는데 고장나거나 할 수가 있는데, 그건 data life cycle에서 숙지하고 지켜야할 것을 놓친 부분이 존재하는 것이다.
그럴땐 뜨는 에러 내용을 잘 읽고, current-log previous-log 등 팩토리오 폴더에 만들어지는 로그 파일을 읽어보라고 시킨다면 읽어봐야지.
일단 생각나는건 여기까지.
오 고마워
이 글을 공지로 추천
갑자기 생각나서 추가로 더 달아둠. 시나리오에 사전 설정된 맵데이터(지형 및 엔티티)는 blueprint.zip이라고 본문에 써놨는데, 사전 설정된 스크립트 데이터 파일도 있다. script.dat 파일인데, 이 파일이 시나리오 폴더안에 있으면 시나리오를 처음 시작할 때, on_init() 이벤트가 발생하지 않으니 참고.