메뉴 건너뛰기

조회 수 7373 추천 수 49 댓글 22
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
Extra Form

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

 

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

 

펀치 클럽의 언어 데이터는 *.-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-02-02 13:02 이야기 > 니노쿠니2 한글 패치 1.0 배포 *36
  2. 2019-02-01 23:04 이야기 > 히트맨 2016 한글 패치 1.0 배포 *36
  3. 2018-09-09 21:55 이야기 > 게이밍 노트북 어떤게 괜찮을까요? *14
  4. 2018-06-30 14:08 이야기 > 회사 기숙사.. 게임 라이프 접어야할 각인지.. *39
  5. 2018-06-21 21:33 이야기 > 뭔가 애매한 게임이네요. *8

  • profile
    위르노 2017.03.08 15:22

    음~ 이런정보는 언제나(?) 제겐 유용합니다

  • profile
    프기니 2017.03.08 15:23
    이상하게 파일 첨부했는데 안보이네요.. 소스 확인하시려면 제 블로그 첨부파일 받으시면 됩니다.
    http://blog.naver.com/physics1114/220953045959
  • profile

    cartoon-man-looking-at-computer-monitor-meme_30_paused.jpg

     

    무슨 소린지 모르니깐 그냥 가만히 있어야겠당

  • profile
    프기니 2017.03.08 15:26

    함수는 https://www.autoitscript.com/autoit3/docs/functions/BinaryToString.htm 이런식으로 참고하시면 툴 제작하는데 도움이 됩니다. :) 나머지 로직은 고안해서 직접 작성해야합니다.

  • profile
    Medusa 2017.03.08 15:37
    정말 좋은 정보인데 전 무슨소리하는건지 알아듣지 못한다는게 슬프네요
  • profile
    나무노래 2017.03.08 15:41

    한국어화 하는 사람들 재촉하고, 욕하고 하는 사람(?)들은

     

    이런 강좌 들이밀면서

    그럼 직접 제작해주세요 하면 다들 흔적도 없이 보이지도 않고,

    번역 13만줄 들이밀면서

    그럼 이거라도 해주실래요 하면 역시 어딘가로 쏙 사라지는

     

    양심에 화인 맞은 사람들이 많은 근래 현실이 안타깝네요

  • profile
    프기니 2017.03.09 01:30
    오늘도 한패 빨리 나왔으면 좋겠다고, 현기증 난다는 분이 계시네요. 흠..
  • profile
    아레스다 2017.03.08 15:46

    차~~암 쉽죠? ㅠ_ㅜ

    시간과 노력을 빼면 쉬울지도 모르겠네요.

  • profile
    Nemesis 2017.03.08 16:07
    헉.. 좋은 정보 감사드립니다...

    예전에 혼자서 공부해보려다가 머리속에서 틀이 잡히질 않아 어려워서 포기했었는데 이렇게 보니 도전욕구가 생기네요.
  • profile
    NovE 2017.03.08 16:20

    후우... 예전 프로그래밍 기억이 새록새록합니다... 이제는 프로그래머가 아니지만... 홋홋! 참 쉽죠잉!!.. 이 인상깊습니다. 하핫...

  • profile
    면세곰 2017.03.08 16:23

    정말 좋은 정보인데

    알아듣지 못하는...

  • profile
    실기 2017.03.08 16:31

    S9Ydgg5.gif

  • profile
    kerakera 2017.03.08 16:35

    좋은 정보인데 말 그대로 생초보한테는 별 도움이 안되는 글 같네요.

    ('코딩의 코자'도 모르는 생초보...)

    그냥 본인께서 아시는 지식 중 그나마 쉬운 지식을 풀어 놓았다는 정도 밖에는...

  • profile
    프기니 2017.03.08 17:52
    코딩이 아니라 로직을 보시면 되는데.. 음.. ㅠㅠ
  • profile
    DoubleSiot 2017.03.08 17:57
    굳이 저 언어를 사용하신 이유가 잇으신건가요?

    장단점이라던가 그런거요
  • profile
    프기니 2017.03.08 18:06

    가장 큰 이유는 해외에 공개된 번역툴 소스들이 오토잇으로 제작된 것이 많습니다. 이걸보고 다양한 경우에 응용해서 제작할 수 있죠. 요지는 참고할 예제 소스들이 많다는 겁니다. 그래서 저도 오토잇으로 시작했고.. 따로 툴이 없는 경우 대부분 직접 제작해서 사용하고 있습니다.

  • profile
    DoubleSiot 2017.03.08 16:46
    와 완전 감사합니다
    이번에 1인 한글화 해보려고 이리저리 알아보는 중인데 고마운 자료네요
  • profile
    은월향 2017.03.08 17:10

    어질어질에 대한 이미지 검색결과

  • profile
    디비딥 2017.03.08 17:47

    확장자가 au3인걸 찾아보니, autoit이라는 스크립트언어용 화일이네요.

    autoit이라는 언어를 배우셔서 작성하시나보군요.

    c도 아니고 새로운 언어를 배우셔서 하신거라니...엄지척!

  • profile
    프기니 2017.03.08 18:03
    언어를 배웠다기 보다는 생각한 로직을 표현할 수단을 오토잇으로 정한 것입니다. 필요하신 분들께는 잘 훈련하시면 한글화하는데 도움이 되리라고 봅니다.
  • profile
    Rs 2017.03.08 21:49

    어릴때 pctools로 게임 해킹하고 프로그램 한글로 바꿔보고 했는데 이젠 너무 오래되서 무슨 소린지도 모르겠네요. ㅎㅎ;

     

     

  • profile
    그리니츠 2017.03.08 23:52

    흐엉..=_=a;학교 졸업과제 할때나 공부하던;;어려운 이야기들이군요..지금은 외계어처럼보이네요...

     

    ㅎㅎ 여튼...이만한 수고와 노력을 해주시는 프기니님 항상 감사하고있습니다 ^^=b


List of Articles
분류 제목 게임 글쓴이 날짜 조회 추천
공지 관리자에게 쪽지보내실때 참고해주세요!!! whals98 05.08 961 20
공지 방송관련글 카테고리가 추가되었습니다. 1 ITCM 08.23 1544 20
공지 ITCM 안드로이드 어플 V1.1 15 CMDev 08.10 4199 34
공지 핫라인 개설!!! 24 매양 01.18 5531 38
공지 시디키즈, G2A등 리셀러 정보 글 작성 금지 매양 10.04 7398 27
공지 나눔 글은 나눔게시판을 이용해주시기 바랍니다. 4 매양 09.26 3645 14
공지 ITCM <스팀그룹> 비공개 전환 안내 및 초대요청 1951 ITCM 08.24 28011 37
꿀팁 [운영자 인증] ITCM 꿀팁정보 모음 (2017/3/16) 33 코코넛먹자 08.05 8691 67
공지 ITCM 내부 규정 안내 - 2017.7.11 UPDATE 65 file ZardLuck 02.05 25852 86
잡담 누군가 제 뒷조사를 하고있습니다 17 file 코코넛먹자 03.08 1448 29
잡담 또 험블 결제 안되네요. 10 file FiveStar 03.08 309 1
질문 sg관련 질문좀... 5 jhii 03.08 216 1
잡담 9시즌을 마무리 지었습니다. 11 file 라네요 03.08 285 6
잡담 한글화 스크립트 툴 제작 방법 - 기초편 22 file 프기니 03.08 7373 49
질문 게임 최적화 프레임 질문(고스트리콘) 8 하지엘 03.08 552 1
잡담 테일즈 오브 제스티리아와 베르세르크 = (간단한 질문) 7 주인공 03.08 416 2
잡담 아직 사회에는 따뜻한 이웃이 있습니다. 7 file 위르노 03.08 467 13
잡담 폴아웃3 vs 폴아웃 뉴베가스 = 추천 좀요 9 주인공 03.08 2296 2
일상 새 계정으로 이사했습니다 마영지 03.08 219 8
잡담 g2a 딜은 언제 이번달게 공개될까요? 7 file Hitomi.La 03.08 539 5
잡담 게임 번들 1티어? 2티어? 9 보롱보롱 03.08 457 4
잡담 우루루루 + 소화제 1 file 볼로냐 03.08 169 6
잡담 GOG게임들 스팀용 한패 호환리스트. (업데이트) 16 file 촉수금지 03.08 683 23
잡담 아우디에서 VR게임을 만들었습니다 3 file 코코넛먹자 03.08 344 20
잡담 키보드 커버 하나 장착해줬습니다. 8 file Rs 03.08 313 7
잡담 기다리는 게 하나 더 생겨버렸습니다.. 7 file QR Code 03.08 425 9
질문 GOG판 호러게임들 한글패치 가능한가요? 3 이나 03.08 317 1
잡담 도전과제, 어디까지 허용하시나요? 20 DoubleSiot 03.08 590 4
잡담 슬슬 그래픽카드를 사고싶어지네요 9 file Fowlox 03.08 430 2
질문 험블 번들 문의 관련글 질문드립니다. 8 감자구이 03.08 353 2
잡담 험블 번들 지르기는 했는데....... 6 Aro 03.08 469 6
잡담 레고 월드 정식판이 나오면서 가격이 2배 정도 오르고... 10 file YS 03.08 1326 8
잡담 개인적으로 미들어스 짜증나는 점.. 5 file 레블릭피스 03.08 528 7
잡담 게임 개인거래 분쟁이 생겨서 그런데.. 조언좀 부탁드... 10 엔틱군 03.08 736 1
Board Pagination Prev 1 ... 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 ... 2453 Next
/ 2453
CLOSE

SEARCH

CLOSE