작성자 : 공수과장


폴하!

일단 사전설명을 하겠다. 별로 간략하진 않을거임. 그리고 이 글은 FO4Edit과 플러그인 구조에 대한 기본 지식이 있는 사람을 독자로 상정한다.

에딧이 뭔지 모르면 일단 구글에 쳐보고 오라는 뜻임. 아무튼, 우선 왜 플러그인 개수 제한이 존재하는지부터 설명하겠다.

그리고 먼저 조언부터 하자면, 모드 설치중에 esp와 esl을 고르라는 문구가 나온다면 무조건 esl을 고르는 쪽이 낫다.

그렇게 한다면 아래에 설명할 내용은 따라할 필요조차 없기 때문이다.


폴아웃(및 스카이림등 베데스다 게임)의 모든 오브젝트는 FormID라는 것을 가지고 있음.

폼ID는 8자리 숫자로 구성되는데, esp 플러그인의 경우는 이 폼ID를 00/000000으로 끊어읽음.


앞에 두자리가 모드 인덱스, 즉 어떤 플러그인에서 유래한 오브젝트인지를 나타내는 표식이고, 뒤의 6자리가 그 플러그인 안의 몇번째 오브젝트인지를 나타냄.


그리고 이 폼ID는 16진수로 구성되어 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F까지 들어갈 수 있음.


따라서 2자리수의 모드 인덱스는 16^2=256개, 최소 00부터 최대 FF까지를 인덱스로 가질 수 있음. 이게 흔히 말하는 플러그인 상한의 실체임.

그런데, 00~06은 폴아웃 본편 및 dlc(모두 가지고 있다면)에서 사용하는 모드 인덱스고, FE는 esl에서 사용하는 인덱스이며, FF는 인게임에서 실행중에 동적으로 사용하는 인덱스임.


따라서 폴아웃의 경우 실질적인 esp 개수 상한은 246개라고 할 수 있다. 스카이림도 거의 같지만, dlc 개수가 몇개인지 기억이 안난다.


스카이림 구버전(LE라고 알려진 그것)에서는 esl이라는게 없었는데, 스카이림 SE와 그 이후 출시작부터 esl이라는 플러그인 형식이 생겼음.

이게 뭐냐면, 앞서 말한 폼ID를 00000/000으로 끊어 읽으라고 지정하는 플러그인 형식임.


다만 앞의 두자리는 FE로 고정이고, 그 다음 3자리를 모드 인덱스로 사용하는데, 따라서 esl의 개수 상한은 16^3=4096개임.

좆나 넉넉해보이지? 맞어 존나 넉넉함. 이거 다 채웠다는 새끼는 동서고금을 통틀어 아직 못봤음.


근본 시스템을 뜯어고치지 않고도 모드 인덱스 버젯을 크게 확보한 고맙고 영리한 파일 형식이다.


물론 esl에도 한계는 있음.


눈치 빠르고 뇌가 우동사리 아닌 사람이면 눈치 챘겠지만, esl은 모드 인덱스를 늘인 대신 오브젝트 인덱스를 깎아먹는 형식임.


따라서 가질 수 있는 오브젝트 개수가 16^3으로 제한되는데, 베데스다 개발진만 아는 기술적인 이유로 인해 오브젝트 넘버링은 800부터 시작함.


따라서 하나의 esl 플러그인이 가질 수 있는 오브젝트 개수의 이론적 상한은 8*16^2=2048개임.


그리고 크리에이션킷 위키에 따르면, 실질적 상한이 오브젝트 종류에 따라 다르다고 한다. 자세한건 링크를 읽어볼 것.


하지만 실제로는 플러그인에 포함된 오브젝트 개수가, 그것도 기존 오브젝트를 변경하는게 아니라 신규 오브젝트만 2048개를 넘는 일은 드물다.


그리고 esp플러그인도 레코드 헤더에 한가지 조치를 취함으로써 이 플러그인을 esl과 같이 인식하라고 지정할 수 있음.


이 글에서는 그 행위를 esl화라고 지칭하겠음.


서론이 길었다. 이제부터 esl화를 어떻게 적용하는지 알아보자. 필요한 도구는 FO4Edit(SSEEDIT)이다.



가장 먼저 필요한건, 니가 깔아둔 수많은 모드 플러그인들 중에 어떤 플러그인이 esl화가 가능한가 조사하는 일이다.


앞서 서론에서 설명한 내용을 토대로 네가 직접 조사할수도 있겠지만, 아주 고맙게도 fo4edit안에 그걸 자동으로 조사해주는 스크립트가 내장되어있다.


먼저 좌측 목록에서 아무 플러그인이나 선택한 뒤 우클릭하여 Apply Script를 선택한다.





스크립트 중 Find ESP plugins which could be turned into ESL을 선택한다.


문맹이 아니면 스크립트 이름만 봐도 이게 뭐하는건지 알겠제?





스크립트를 실행하면 다음과 같은 메세지가 주우우우우우우우우우우우우욱 뜬다.


기본적으로 여기 표시되는 플러그인들은 전부 esl화가 가능한 것들이지만, 세부 사항에서 차이가 있다.


영어를 읽을줄 알면 내가 설명할 필요도 없겠지만 그래도 빠가사리들을 위해 굳이 설명하겠다.


Can be turned into ESL by adding ESL flag in TES4 header는 너희가 가장 기뻐하고 반겨야 할 문구다.


아래에서 설명할 과정 중 폼ID압축 그런거 다 건너뛰고 바로 esl플래그 박은 다음 저장하면 된다는 뜻이다.


Can be turned into ESL by compacting FormIDs first, then adding ESL flag in TES4 header는 뫄 그래도 폼아이디 압축을 하면 박을 수 있다는 뜻이다.


다만, 여기에 warning이 따라붙으면 하지 마라. 안내 메세지에도 하지 말라고 적혀나오는 것들은 무시하면 안된다.


그리고 추가로, 스크립트가 딸린 모드들은 esl화를 했을 경우에 오류가 발생할 가능성이 존재한다.


스크립트는 esl화 후에 오류가 생길때도 안생길때도 있기 때문에 내가 뭐라고 해줄 수 있는 말이 없다.


다만 esl화를 진행하기에 앞서 모드 구성물 또는 ba2의 내용물을 들여다 본 뒤, scripts 폴더가 존재한다면 esl화는 삼가거나 백업을 마련해두는 편이 좋다.


스크립트는 fo4edit으로는 수정이 불가능하고, 크리에이션 키트를 사용해야만, 그리고 psc 소스가 있어야만 편집이 가능하다.


이게 뭔지 설명하려면 너무 길어지는데다 나도 잘 이해를 하지 못한 부분이므로 생략하고, 스크립트에 대해 잘 아는 사람은 이따위 글을 볼 일도 없을 것이다.




일단 예시로 사용할 플러그인은 폼아이디 압축을 사용해야할 플러그인으로 하겠다.


먼저 좌측 목록에서 플러그인을 선택하고 우측에 Number of Records와 Next Object ID를 보자.


대가리가 호두알이 아니라면 왜 이걸 보라고 했는지는 알거다. 이 과정에서 오브젝트 개수가 2048이 넘어간다면 무슨짓을 해도 esl화가 불가능하다.


그리고 다음 오브젝트 아이디는 현재 모드 인덱스가 어디까지 진행했는지를 나타내므로, 앞의 6자리가 0이 아닌 경우에는 폼아이디 압축이 필요하다는 뜻이다.


물론 이 두개를 살펴보는 작업은 위의 스크립트가 이미 대신해주었지만, 독자의 깊은 이해를 돕기 위해 부연설명했다.


이 예시의 경우에는 1.레코드 개수가 2048개 미만이지만, 2.오브젝트 ID가 **000FFF를 초과했으므로, 폼아이디 압축을 해야만 esl화가 가능하다.




폼아이디 압축을 하기 위해서는, 먼저 esl플래그를 박지 말고 좌측 목록에서 우클릭한 후 Compact FormIDs for ESL을 선택한다.


이게 뭐냐면, **000FFF를 넘어서는 오브젝트들을 *****800부터 새로 넘버링해주는 기능이다.




클릭해보면 몇개의, 그리고 어떤 종류의 오브젝트가 리넘버링될 것인지 알려주는 경고문이 뜬다.


여기서 스크립트와 관련이 있어보이는 종류의 오브젝트가 포함되어 있다면 잠시 작업을 멈추고 확인해보거나 백업을 마련해두는 편이 좋다.


어떤 종류의 오브젝트가 스크립트를 포함하냐고? 그건 니가 모드질하면서 대충 짬으로 파악해라. 나도 딱 잘라 말하긴 힘들다.


일단 QUST는 높은 확률로 스크립트를 포함한다고 말해두겠다.




위의 폼아이디 압축이 끝났으면 우측 목록에서 Record Header - Record Flags - ESL을 체크하고 저장하면 끝이다.


만약 위의 과정에서 폼아이디 압축이 필요 없는 경우에는 이것만 체크하고 저장하면 된다.



실제로 할때는 좆도 아닌건데 이걸 일일히 설명하려니 생각보다 글이 길게 되는구만. 다 썼으니 자러간다 ㅂㅂ