블로그에 작성하는 겸 정보가 될까 싶어서 남깁니다.

 

일반적으로 한글 패치를 제대로 제작하려면 바이너리 스크립트 데이터의 원문 길이를 반영하여 문장의 길이, 오프셋 등을 반영해주는 툴을 제작할 수 있어야합니다. 텍스트 정보를 담고 있는 간단한 바이너리 데이터 예제로, 제가 한글화 작업하면서 제작한 펀치클럽 스크립트 소스를 살펴보도록 하죠. 스크립트 툴을 직접 제작하실 분들은 본 강좌와 첨부 파일의 소스를 참고하시기 바랍니다.

 

펀치 클럽의 언어 데이터는 *.-9 파일에 포함되어 있습니다. 다행히 다양한 언어를 하나의 포맷에 담지 않고 언어별로 파일이 따로 존재하며, 구조가 간단한 편이라 강좌에 적합할 것 같아서 선정했습니다.

 

다른 언어 데이터와 비교해보자면, 0xA9d0까지 헤더 정보가 같고, 0xA9d0의 BF 08 00 00 은 문장 개수인 2239줄을 의미합니다.

이 값이 문장의 개수를 반영할 것이다라는 것은.. 누가 가르쳐 주는 것이 아니라 한글 패치를 많이 제작한 경험을 바탕으로 쌓이게 되는 감각입니다. 이쯤되면 카운팅을 반영할 값이 분명히 존재할 것이라는 사실을 추정하여 찾아내는 것은 결국 수많은 데이터를 분석해봐야 가능한 일입니다. 분석이 힘들다면 quickbms 기초 강좌부터 다시 들으시기 바랍니다. http://blog.naver.com/physics1114/220348616652

 

K-046.png

 

분석에 익숙하다면 이제 데이터를 간단히 살펴보도록 하죠. 그 다음은 각 문장 길이 값 + UTF-8 문장, 문장이 종료되면 00 null로 채우고,

다음 문장 길이 값이 등장합니다. 이때 null은 반드시 다음 문장 길이 값이 4의 배수 번지에 위치하도록 해주는 데이터 placeholder의 역할입니다. 아래 사진의 HP는 2바이트 이므로 null인 00가 2번, エネルギー는 길이가 0xF = 15이므로 16 - 15 = 1 즉, 00이 한 번만 사용됩니다. 일반적으로 한글화 스크립트 툴 제작할 때 반드시 고려해야할 중요한 요소입니다.

 

K-043.png

 

여기서 한 가지 짚고 넘어가야할 점은 특이하게도 중간에 아무런 텍스트 정보를 담고 있지 않은 null 0x00 00 00 00도 있다는 것입니다.

다음 사진의 회색 음영처럼 말이죠.

 

K-044.png

 

이런 예외를 고려하여 스크립트를 추출해보도록 하겠습니다.

7번째 줄 - FileSetPos를 이용하여 파일을 연다음 0xA9d0를 시작지점(0)으로 지정합니다.

8번째 줄 - 0xA9d0로 부터 4바이트 만큼 BF 08 00 00를 읽고 이를 2239로 변환합니다.

9번째 줄 - $Text라는 새로운 변수를 정의합니다. 33번째 줄에서 txt로 저장할 변수의 이름을 지정하는 것입니다.

 

15 ~ 16번째 줄 - 4바이트 만큼 문장 길이 정보를 읽어서 $len으로 저장합니다.

만일 이 때 $len = 0 인 예외적인 경우(회색 음영)는 $Text를 0x00000000로 지정하고, 한 줄 띄어쓰는 명령(@CRLF)을 붙입니다.

 

18 ~ 22번째 줄 - 예외가 아닌 일반적인 경우, 즉 $len 값이 0 이 아닌 경우..

문장 길이 만큼 바이트를 읽고 이 때 0x0A등의 구분 값을 치환하는 StringRegExpReplace를 사용한 다음 $Text에 저장하고 한 줄 띄어쓰는 명령(@CRLF)을 붙입니다.

 

23 ~ 28번째 줄 - 문장 길이에 따라서 다음 문장 길이 값이 시작 될 위치를 계산하여주는 식입니다. 수식은 당연히 분석하면서 직접 만들어줘야하는 부분입니다.

 

K-040.png

 

결과물 예상했던 2239줄로 추출되었습니다.

K-047.png

 

이제 다시 리팩하는 import툴을 제작해보겠습니다.

27번째 줄 - 먼저 문장 개수값을 포함하여 0xA9d4까지 파일을 읽고 이를 새로운 $New Header로 지정합니다.

K-041.png


34 ~ 44번째 줄 - txt를 읽어 예외적인 경우 0x00000000을 그대로 반영하여 $Newtext에 바이너리 값으로 저장하고, 그렇지 않을 경우

StringToBinary함수를 사용하여 txt의 UTF-8을 바이너리 값으로 변경합니다. 4를 사용하면 UTF-8을 변환해줍니다.

Shift-JIS는 오토잇의 경우 복잡하므로 강좌에서 다루지 않습니다.

 

46~53번째 줄은 앞서 언급했던 null을 몇 개나 더해줄 것이냐를 계산하는 식입니다. 제가 작성한 것이므로 더 간단한 방법이 있다면 그 방법을 사용하시면 됩니다. 일반적으로 정해진 규칙은 없고 본인이 어떻게 풀어서 작성할지를 고민하시면 됩니다.

K-042.png

 

마지막으로 57 ~ 67번째 줄은 새로 생성할 $Newfile에 새로운 헤더와 바이너리 데이터로 변환 시킨 $Newtext

그리고 원본에서 붙여줘야할 꼬리 부분인 $Tail값을 조합하여 새로운 바이너리 데이터를 생성하여 저장하는 과정입니다.

이렇게 하면 새로운 바이너리 데이터가 생성됩니다.

 

K-048.png

 

혹시 프로그래밍 따로 배워서 그런 것 아니냐고 오해하실 수도 있지만, 저는 물리학이 전공이라 따로 프로그래밍을 배운적이 없습니다.

한글화를 처음 시작한지 벌써 4년이 되어가는데.. "서당개 3년이면 풍월을 읊는다"고 합니다.

고로 여러분도 할 수 있습니다. 어떤가요 참 쉽죠? 이상으로 기초편이었습니다.

 

easy.jpg

글쓴이 님의 최신글
  1. 2019-08-01 22:00 이야기 > 디스아너드 브릭모어의 마녀들 번역가 모집 *8
  2. 2019-02-02 13:02 이야기 > 니노쿠니2 한글 패치 1.0 배포 *36
  3. 2019-02-01 23:04 이야기 > 히트맨 2016 한글 패치 1.0 배포 *36
  4. 2018-09-09 21:55 이야기 > 게이밍 노트북 어떤게 괜찮을까요? *14
  5. 2018-06-30 14:08 이야기 > 회사 기숙사.. 게임 라이프 접어야할 각인지.. *39

Who's 프기니

profile
Prev 9시즌을 마무리 지었습니다. 9시즌을 마무리 지었습니다. 2017.03.08by 라네요 게임 최적화 프레임 질문(고스트리콘) Next 게임 최적화 프레임 질문(고스트리콘) 2017.03.08by 하지엘

Articles

1313 1314 1315 1316 1317 1318 1319 1320 1321 1322
-->