
사실 고민을 많이했다. 어떻게든 작업을 같이해줄 팀을 구해봐야 하나 이대로 마무리하는게 가능한가
아무도 관심없을 구작이지만, 최근 사설서버 부활에 관한 사실과 함께 한글화에 대한 기대감이 커진듯하다
차후 누구나 수정할 수 있도록 공개번역 방식을 희망하지만, 진행이 잘 될 수 있을지, 이대로 접을지, 아니면 혼자 마무리할지... 그냥 구글시트를 열고, 번역이 마무리되길 기다리고 적용한다? 이부분도 기술적으로 조금 어려움이 있다.
어쨌든 도스 번역을 원하는 사람들이 있고, 같이 번역이 진행된다면, 생각보다는 빨리 끝날지도 모른다.
작업방식이 지나치게 복잡한 감이 있는데 제대로된 전용툴이 없어서인게 크다.
일단 python3와 JDK8을 설치해야 된다.
그리고 visual studio 코드와 notepad++로 설치해준다. HXD도 깔아두길 권장한다.
번역도구 2013도 받아둔다
https://blog.naver.com/lds5645/50178327250
madEdit도 받아둔다.
https://sourceforge.net/projects/madedit/
설치방법은 구글 참조
본격적으로 번역방식에 대해 얘기해보자면,
번역해야 할 파일은 크게 세가지인데 mwo파일, NPC대사, mib파일이 있다.
mib파일이나 NPC대사는 문제가 없지만, 그 외 파일들은 기계어와, 문자열들이 섞여서 저장되어있다.
뭔말이면, 그냥 쭉 뽑아서 글자수 상관없이 쭉 번역하고 쭉 넣기는 어렵다는 말이다.

시작하기전에 먼저 탐색기에서 숨긴항목 파일확장명이 모두 표시되었는지 확인하고 시작한다

먼저 Xpert를 키고 다음과 같이 설정해준다
xpert 옵션에서 사진과 같은 플러그인을 선택해주고 sound options에서 strumpet1.wav를 선택하는걸 잊지말자

파일 열기

각각 1.Extract LBA, 2.Extract File, 3.Rebuild File, 4.Rebuild LBA다
파일 추출에는 1->2
파일 리빌드에는 1->3->4번임을 직관적으로 알 수 있을것이다

조금 기다리면 추출이 완료될것이다.

AFS 플러그인을 선택하고

All files로 바꿔주면 DATA.bin이 보일텐데

역시 마찬가지로 1번 2번을 누르고 기다리면 추출이 완료된다

그러면 @DATA.bin이 보일텐데

마찬가지 방식으로 두개를 추출해준다

그리고 @FILE000000.ADX로 들어가면 bar.bin이니 cocot.bin이니 보일텐데 얘네가 바로 NPC대사파일이다
mib.afs로 있을텐데 얘는 퀘스트 파일이다 같이 추출해준다.
그리고 @FILE000001.ADX으로 가보면

여러가지 파일들이 보일텐데 mwo3라고 윈도우로 치면 dll같은 애들인데 대부분의 번역할 내용들이 (흔히 대사로 말하는) 여기에 들어있다.

리빌드는 어떻게 하냐면 똑같이 열어주고 1->3->4번순으로 누르면 NEW-DATA.BIN이런식으로 생길텐데, 수정한 파일이 새 파일에 적용이 되려면 원래 이름으로 돌려줘야 된다.
DATA.bin을 DATA_.bin으로 이름을 변경해주고, NEW-DATA.BIN을 DATA.bin으로 바꾸고 다시 전체 ISO리빌드 이런식으로 하면 된다.(FILE000000.adx 이런것도 다 마찬가지 순차적으로 하위폴더에 있는것부터 리빌드 해온다.)
문제는 이렇게 ISO를 리빌드하고 xdelta를 만들면 xdelta가 너무 커지기 때문에
DATA.bin까지 리빌드를 하고 ISO를 리빌드하는대신 원래 DATA.bin이랑 크기를 맞춰주고 Apace 2.0으로 바꿔치는 방식을 사용한다
문제는 파일크기가 동일해야 한다는건데 원본 DATA.bin보다 파일크기가 크면 답이없고, 작으면 뒤에 00로 패딩해주면 된다.

HXD를 이용하면 이런식으로 바이트를 삽입할 수 있다. HXD로 두 파일을 열고, 원본주소 - 수정된파일의 주소=XXXX
만큼을 삽입해주면 될것이다.

그래서 어떻게 XXX를 계산해야 하는데??
그냥 간단하게 하는 방법은
블록단위 선택으로 작은쪽(우리가 수정한 DATA.bin)에서 블록단위 선택으로 오프셋 시작 값을 복사하고,
큰쪽(원본 DATA.bin)으로 가서 블록단위 선택에 가서 오프셋 시작에 복사한 값을 붙여준다
그리고 다시 블록단위 선택을 누르면 길이가 뜰것이다.
다시 작은쪽에 가서 그 길이를 복사해서 바이트 삽입으로 삽입하면 아마 한바이트 넘칠텐데 그걸 지워주면 된다.

그리고 파일크기가 같아졌다면, apache를 이용해서 선택한 파일을 바꿔준다.
그래도 모르겠으면 넘어간다.
이제 추출, 리빌드는 어느정도 설명한것 같다.
먼저 폰트파일부터 얘기해보겠다.
폰트는 s20rm04.bin이라는 파일이다
먼저 파이썬을 이용해서 압축을 해제해야 되는데
crappack-cmd.py라는 스크립트가 필요하다
언팩은
python crappack-cmd.py -u inputToUnpack.bin
리팩은
python crappack-cmd.py -p inputToBePacked.bin
사용법은 다음과 같다

python crappack-cmd.py -u s20rm04.bin
배치파일에 다음과 같이 넣고 실행하면 s20rm04.bin.unpacked가 보일것이다
이걸 크리스트타일로 열고 넓이 40 높이 20 Tile 단색 1bpp로 두면 한자가 보일것이다.
외국친구들 말로는 넓이 40 높이 20 Tile 단색 1bpp 이 아니라, 넓이 20 높이 20 Tile 4색 2bpp라는데 그게 더 말이 되는것 같기도 하다.
보기에서 창에 맞춤을 선택후 크기를 원하는 크기로 조절한다
이걸 2350자의 한글로 덮어씌우면 '亞'라는 글자를 '가'로 출력할 것이다

포토샵을 열고 이걸 복사하고 한글로 수정하고 다시 붙여넣으면 되는데 가독성이 영 좋진 않다
(어쩌면 4bpp로 두고 수정하면 가독성이 좋아질지도 모르겠지만... 하지만 일단 이대로 두기로 했다)
python crappack-cmd.py -p s20rm04.bin.unpacked
모두 저장후 모든것이 잘 되었다면 수정된 폰트가 생성될것이다.
앞서 말했듯이 대사에는 mwo파일, NPC대사, mib파일이 있다.
첫번째로 mwo파일 부터 살펴보자

이런식으로 파일 도출 화면에서
원본 bin 폴더와 추출될 폴더 사전들을 선택해준다.
처음엔 원본+번역으로 추출했는데 알고보니 WQSG가 더 편한것 같기도 하다... (그런데 이미 작업이 너무 되서 수정 불가능)
내 기억으로는 현재 사용하는 세팅이
추출은 문자사전 SJO.tbl 제어사전 common.ctl
도입은 문자사전 kor_two.tbl 제어사전 common.ctl이었던것 같다.
txt파일로 도출하면 파일이 추출된다

번역이 잘되었다면 원본파일폴더, 번역된 폴더를 선택하고
문자부족삽입은 NULL채움 문자 초과처리는 글자줄임으로 두고
스크립트 적용(새폴더)를 누르고 출력된 파일을 선택해주면 된다.
실제로 이렇게 추출하면, 대사가 아닌 쓰레기값이 섞이거나 바이트가 밀리거나. 혹은 일부 대사는 추출이 되지 않거나 할텐데 대부분 노가다로 맞춰두긴 했다.

문제는 이대로 두고 수정하기엔 영 불편하다.
그래서 이걸 엑셀 형식으로 변환하기 쉽기하기 위해 Lineone, LineTwo라는 프로그램을 만들어 두었다.
원본->Lineone실행->TSV형식->엑셀로 읽어서 수정->TSV출력->Linetwo실행->수정본
이런 방식으로 진행된다
편하게 처리하기위해서 맨위 노란색으로 표시한 부분은 자르고 가공했는데
내용 자체가 중요한것 같지는 않은데 없으면 첫째줄이 짤린다 따라서 수정본을 번역도구로 적용하기 전에 먼저 저 부분을 되돌려주어야 한다.
이걸 이제 적용해주면 되는데 물론 파일이름은 처음 추출할때와 같아야 한다.
번역/검수만 할 생각이라면 아래만 잘 읽으면 된다.

모든게 잘 됐다면 이렇게 깔끔하게 수정할 수 있을것이다.
E에는 글자수 F에는 글자수 차이가 저장된다(크면 빨간색 같으면 회색 작으면 파란색)
이렇게 수정하고, F에 빨간색이 없다하면 저장후 백업해둔다.
그리고 마지막으로 E,F열은 삭제하고 다른이름으로 저장할때 유니코드 텍스트로 저장후
LineTwo 파일이름.txt를 실행해준다
그리고 아까 말했듯이 노란색부분을 되돌리고 번역도구2013으로 적용해주면 된다.
문제는 글자수가 넘치는 경우인데
(현재 테스트할때는 그냥 적용이 들어간 상태인데 이러면 어디가 오류가 날지도 모른다.)

MadEdit으로 원본파일을 열고 Shift-jis로 표시하게 한후
A열에 있는 주소값을 복사후 Ctrl+Shift+G를 누르고 주소값을 입력해준다.
그리고 뒤에 0이 여유가 있다면 A열의 L을 조금 더 늘려주면 글자수의 여유를 가질 수 있다.
(저 범위의 바이트수는 원래는 32가 맞는데 프로그램이 오래됐는지 2바이트 문자열이(일본어라던가) 섞여있으면 Size가 하나가 작거나 크게 표시될 수 있다. 보통 2의 배수여야 되니까 대충 해보면 알 수 있을거다)
중요한건 끝에는 무조건 0이 들어갈 자리 하나는 남겨야 된다는것이다.
이외에도 %라던가 반각/전각이라던가 주의점이 몇가지 있다
Q.그런데 어차피 대사가 있을 주소값도 알고 뒤에 0이 있으면 여유가 있다는걸 알면 글자수를 자동으로 늘려주는 프로그램을 짜면 되지 않나요?
A. 맞는 말이다. 그걸 프로그램을 만들 방법을 생각하는 시간에 노가다를 했다는 걸 빼면
Q.{NEWLINE}이 너무 불편해요 D열을 선택후 '찾기 및 바꾸기'로 {NEWLINE}을 (Ctrl-J)로 바꾸기해서 줄바꿈으로 바꾸고 나중에 (Ctrl-J)를 {NEWLINE}으로 바꾸기해서 되돌리면 되지 않나요? 그후 셀서식에서 텍스트 줄바꿈을 선택하면 줄 바꿈도 깔끔하게 표시되구요
A. 그러게 말이다. 그래서 괜히 한셀대신 엑셀을 사용하라는게 아니다.
두번째는 mib파일인데 이건 자바로 만든 전용툴?이 있다
역시 이것도 문제가 없는건 아닌데 글자수 제한도 있고, 중복파일이 너무나도 많다.
일단 중복제거를 해둔상태인데extract.bat으로 추출후 string_table_x.txt형식의 txt파일들을 적절히 수정후 백업해두고
글자수가 안 넘쳤길 기도하면서 rebuild를 하는 수밖에 없다.
번역이 완료되었으면 gema.bat을 실행하여 글자를 치환 rebuild.bat을 눌러 리빌드순으로 진행된다.
세번째로, npc대사도 전용툴을 사용하는데 상대적으로 글자수 여유는 있다.
먼저 crappack-cmd.py로 전부 언팩하고 번역을 다듬고(문장부호도 점, 쉼표로 통일해주고) 그 후 gema.bat을 눌러 대사를 치환해주고,
rebuild.bat으로 리빌드를 해준다. 그다음에 출력된 xxx.out 파일들을 리팩 폴더에 옮기고 k_cmd.bat을 실행해준다.
모두 문제없이 잘 되었다면, 파일들을 위에 설명한 방식으로 넣으면 된다
https://www.mediafire.com/file/ssb2am0858tiwy3/mh2k_demo.xdelta/file
mh2k_demo
www.mediafire.com
이것이 테스트로 적용한 파일이다.
여담)
역시 이왕 얘기하는거 몬헌 3 한글화에 관해서도 안할 수 가 없는데
폰트는 트라이도 s20rm04.bin을 폰트로 사용하는건 똑같다. 다만 압축이 풀려있는 상태이다.
대사는 대부분 .dol .rso파일에 있고, itemdata.bin과 quest00.bin에 0xff로 xor되어 저장되어있는데
파일 분석이 귀찮은 관계로 그냥 0xff와 xor해주고 그냥 dol, rso파일과 같이 번역도구2013로 수정후 다시 xor해주기로 했다.
이미지 파일은 tpl brres파일에 있는데 Brawlbox라는 툴로 수정할 수 있는 일반적인 포맷이다.
https://www.mediafire.com/file/55bff9vakbsgp0r
mh3_mod
www.mediafire.com
번역이 완성된다면 대충 이런 느낌인데
번역이 중간에 짤리거나 번역해야 될 곳이 번역되어 있지 않거나 하긴 하지만 번역이 제대로만 된다면 나쁘지는 않을것 같다.
몬헌3G가 있는데 트라이를 트라이해야할 이유는 좀 적을 수 있겠지만 말이다.
2023-01-19)
주의!! 현재 mib 중복제거 폴더의 내용이 잘못된걸 발견했다. extract.bat을 눌러 직접 추출해서 사용할것
'몬스터헌터' 카테고리의 다른 글
| 아이루마을에 봄이 올까요? (3) | 2023.01.05 |
|---|---|
| 저장용) MH3G HD용 수정용 도구 (0) | 2023.01.05 |
| 몬헌 포터블 한글화 작업물 (0) | 2023.01.01 |
| Xpert 2.0 (1) | 2023.01.01 |
| PPSSPP UPNP 설정이 안될떄 (0) | 2022.09.09 |