시작하게 된 동기
패스 오브 엑자일 유저의 상당 수는 관련 프로그램인 "Path Of Building"을 애용한다. (이하 pob)
그러나 영어 외 다른 언어를 지원하지 않기 때문에 다소 불편함이 있다.
이에 한글 pob는 중국인이 개발한 PoeCharm의 데이터를 직접 수정해 넣는 방식으로 사용하고 있다.
오픈소스인데다가 한글 클라에는 이미 번역된 데이터가 존재함에도 불구하고 이런 문제가 있다는 것에 의문을 가졌다. 또한 매번 한글 pob나 poeCharm의 업데이트 버전을 받아야하는 것에 다소 불편함을 느껴, pob fork의 버전을 따라 런처에서 업데이트가 가능한 것을 원했다.
즉, 인게임 데이터는 한글클라 poe의 GGPK 파일에서 긁어오며 pob의 업데이트는 원래 pob fork 저장소에서 가져오는 한글 pob를 만들고 싶었다. 그런데 작업을 하다보니 중도에 포기할 가능성이 높은 것 같아서... 누군가 이것을 보고 도움이 됐으면 하는 바램으로 글을 올리게 되었다. 미래의 내가 보고 다시 진행할 수도 있고... 암튼, 아직 작업이 다 끝난건 아니지만 진행과정을 공유해본다.
문제
한글 버전이 제대로 동작하려면 다음을 해결해야하는 것으로 보인다.
- pob가 사용하는 그래픽 라이브러리인 SimpleGrahpic이 유니코드 출력을 지원하지 않는다.
- 인게임 데이터를 영어 버전만 추출해서 하드코딩해 사용한다.
- 망령과 고유 아이템 데이터는 따로 입력해줘야 하는 듯 한데, 확실하지 않다.
- 여러 가지 Mod(피해 증가 등 다양한 옵션들)을 정규식으로 읽어 파싱한다.
해결
라이브러리 유니코드 출력 문제
opengl에서 유니코드 출력을 하는게 근본적인 문제라서 freetype 라이브러리를 설치해서 직접 구현도 하려고 시도해봤다. 하지만 유니코드 출력이 된다해도 이후의 문제들을 해결하지 못한다면 의미가 없다고 판단해서, 일단 빌드해서 테스트를 해보고 문제가 있으면 라이브러리 코드로 다시 되돌아와 수정하는 것으로 결정을 내렸다. 찾아본 결과 이미 유니코드 지원하게 코드를 수정한 사람들이 몇몇 있었다. 그 중 PoeCharm 개발자인 ZdDroid님이 올리신 코드를 참고했다. 이를 바탕으로 라이브러리를 재빌드, pob 폴더에 넣는다. pob의 BuildListControl.lua에서 몇몇 버튼의 텍스트를 한글로 바꾼뒤 실험 결과 이상 없고 올바르게 출력된다.
게임 데이터 추출 후 적용 루아 스크립트에 적용
깃허브를 찾아보다가 PoeCharm과는 좀 다른 중국버전 pob를 찾아냈다.
여기 커밋된 내역을 참고하면 GGPK 파일의 Data/Simplified Chinese 경로에 있는 데이터를 가져오는 것을 알 수 있다. 따라서 한글 데이터를 가져오려면 Data/Korean 으로 바꾸면 된다. 나는 링크와 같이 수정했다.
이제 GGPK 데이터를 추출해야하는데, 하는 방법은 pob fork 레포지토리에 나와있다.
간략하게 요약하면 다음과 같다.
- ooz를 빌드해서 bun_extract_file.exe, libbun.dll, libooz.dll 파일들을 Export/ggpk/ 폴더에 넣는다.
- pob exe파일 바로가기를 만든다. 폴더 우클릭 > 새로 만들기 > 바로가기 > exe 파일로 만들 수 있다.
- 바로가기 파일의 속성을 열고 대상의 링크 끝에 매개변수를 넣어준다.
이후 이 바로가기를 실행해서 Edit Sources를 누르고 경로를 설정해준다음 Run All을 누르면 정상적으로 pob 데이터 폴더의 루아 스크립트에 반영된다.
이제 한글 출력은 제대로 되고 있다.
하지만 각 데이터들이 어떤 옵션을 의미하는지 제대로 파싱해야 pob가 제 구실을 한다.
문제는 이것마저도 ModParser.lua에 정규표현식으로 하드코딩되어있어 한국어로 수정해줘야 하는데, poe의 옵션 갯수가 상당히 많으므로... 상당히 고될 것 같다. 또한 몇 개만 테스트해봤을때 올바르게 파싱되지 않는 것을 보아... 영어와 한국어의 어순이 다르므로 아예 정규표현식을 이용한 방법이 불가능할 수도 있겠다는 생각이 들었다. 다행인건 스킬젬의 모드들은 대부분 잘 읽는 것 같긴한데, 아이템은 그렇지 못하다는 점...
이때문에 PoeCharm은 인게임 데이터 관련 lua는 그대로 두고, 이 데이터들에 대해 번역 문자열 테이블을 만들어서 출력할 때만 바꿔주는 듯하다.
이후
여기서 어떻게 할지 고민하다가 일단 스탑했다.
사실 https://github.com/tzw28/PathOfBuildingCN17173 를 한글버전으로 포팅하는 것에 가까워지지 않을까 싶다. 아니면 PoeCharm이 한 것 처럼 영어 데이터 - 번역 데이터 매핑 테이블을 만드는 수밖에 없는 것 같다. 일단 이 중국어 버전에도 어떤 문제점이 있는지, 앞서 말했던 요구사항들이 잘 해결되어있는지부터 확인해봐야하고... 잘될지 안될지 모르겠지만 여유가 되면 계속해서 진행해볼 예정이다.