본문 바로가기
GAMES/게임 주저리

어드밴스드 대전략 2001 (ADVANCED 大戦略 2001) 한글화 테스트

by NSM53 Project 2010.09.16

(파시스트가 될랍니다. Waiting For The Worms)





지난번에는 바이오하자드 2를 통해서 고유코드에 할당된 폰트를 교체하는 것으로 한글화하는 방법을 알려드렸는데 이번에는 실행 파일을 디버거를 통해 디스어셈블해서 한글화하는 방법을 살펴 보겠습니다. 대상 게임은 어드밴스드 대전략 2001 + PK 분석도 저번과는 달리 좀더 어드밴스드한 과정을 거칩니다ㅋ

사실 이 게임은 개인적인 이유가 있어서 비공개로 한글화 중이었습니다. 하지만 완성이 되더라도 공개할 예정은 없으니 뜻 있는 분들이 새로 진행하시면 좋겠군요.


일단 세이프디스크가 적용된 게임이라 세이프디스크를 제거해야 디버깅할 수 있습니다. 시디의 실행 파일은 버전이 2.03에 세이프디스크 2, 업데이트 파일은 버전이 2.15에 세이프디스크 3으로 되어 있는데 세이프디스크 3은 현재 제대로 제거가 안 되는지라 2.15 업데이트 설치 후 프로텍터가 제거된 2.03 실행 파일을 덮어씌우면 2.15 환경으로 실행할 수 있습니다. 세이프디스크 제거는 각자 구글링을 통해서~






역공학에서 일반적으로 많이 쓰이는 ollydebuger 입니다. olly로 실행 파일을 열어 보면 이렇게 어셈블리로 뭔가가 주르륵 나오는데 다른 건 필요 없고 폰트를 정의하는 함수를 찾아서 Charset(캐릭터셋: 언어 지정)을 수정하는 겁니다.

CreateFontA
CreateFontIndirectA

이 두 가지 함수가 일반적으로 쓰이는데 대전략은 CreateFontIndirectA 사용하는군요. CreateFontA와는 달리 CreateFontIndirectA는 로그폰트라는 구조체를 호출하는데 CreateFontA보다는 값을 찾기가 조금 까다롭습니다.


참고로 이스 6가 CreateFontA 함수를 사용합니다. 찾기도 쉽죠 :D

이스 6

PUSH ys6_win.0053A66C           ; /FaceName = "MS Pゴシック"
PUSH 12                                  ; |PitchAndFamily = VARIABLE_PITCH|FF_ROMAN
PUSH 2                                   ; |Quality = PROOF_QUALITY
PUSH 0                                   ; |ClipPrecision = CLIP_DEFAULT_PRECIS
PUSH 4                                   ; |OutputPrecision = OUT_TT_PRECIS
PUSH 80   <- 81로 수정          ; |CharSet = 128.
PUSH 0                                   ; |StrikeOut = FALSE
PUSH 0                                   ; |Underline = FALSE
PUSH 0                                   ; |Italic = FALSE
PUSH 190                                ; |Weight = FW_NORMAL
PUSH 0                                   ; |Orientation = 0
PUSH 0                                   ; |Escapement = 0
PUSH 0                                   ; |Width = 0
PUSH ESI                                ; |Height
CALL DWORD PTR DS:[<&GDI32.CreateFontA>] ; \CreateFontA


*캐릭터셋 128(16진수 80)은 일본어, 129(16진수 81)은 한국어입니다.


FaceName에 대해선 언급을 안 했는데 사용할 폰트를 지정하는 겁니다. 한글 폰트인 Gulim이나 batang 등으로 수정해 주면 되지만 윈도의 fontlink 때문에 굳이 수정하지 않아도 굴림으로 출력됩니다. 다만 안정적인 실행을 위해서 수정을 해주는 편이 좋을 겁니다. fontlink에 대해선 다음 포스팅에서 다루도록 하겠습니다.






어쨌든 브레이크포인트니 뭐니 해서 지지고 볶아 값을 추적하면 스샷과 같은 부분이 나옵니다. 이 부분을 아래와 같이 수정합니다. 아까 81이 한국어라고 했죠?
 

00403361  |. C605 C7B84A00 >MOV BYTE PTR DS:[4AB8C7],80 <-81로 수정


중간에 jmp 시켜서 코드를 추가하는 방법도 있지만 그 방법을 이해하시는 분이라면 제 글을 보고 있을 필요가 없기 때문에 생략하겠습니다. 사실은 그렇게 하다 망했어요.






성공하면 이렇게 한글이 출력됩니다. S-JIS 코드와 한글 확장완성형 코드가 겹치는 부분이 있기 때문에 한국어 Charset으로 바꾸면 일본어 대신 이렇게 확장완성형 글자가 출력됩니다. 일명 '뷁어'






게임의 메뉴는 이런 과정을 거치지 않고 리소스 에디터로 그냥 수정하면 됩니다. 유틸리티 한글화에 많이 사용하는 프로그램이죠. 당연히 메뉴가 아닌 게임 내 텍스트는 수정할 수 없습니다 :)







이제 '뷁어'가 나오는 걸 확인했으니 뷁어에 해당하는 원문 대사를 찾아서 헥스에디터 등을 이용해 한글로 수정합니다. 대사 포인터 구조가 아주 친절하게 되어 있어서 대사 확장에도 어려움이 없습니다. 다만 공간이 부족할 뿐이죠ㅋ

전반적인 스크립트는 AD3Data.dll 파일에 들어 있으며 SCENARIO 폴더에 있는 파일에도 일부가 각각 들어 있습니다. 지형이나 인명 등이 누락되어 있는 걸 봐선 다른 파일에도 스크립트가 있을 텐데 아직 확인해 보지는 않았습니다. 한번 찾아보세요 :)

다만 한 가지 난감한 점이라면 문장을 조합해서 사용합니다. 복잡한 조합은 아니고

私は学生 + です
            ですよ
            ですね
            ですわ
            だな
            だぞ

이런 식으로 조합이 됩니다. 동일한 말을 인물에 따라 다른 뉘앙스로 표현하려고 저렇게 한 것 같습니다. 큰 문제는 없지만 必要です처럼 우리말과는 안 맞는 경우가 있으니 머리를 굴려봐야겠지요. 조합되는 뒷 부분을 없애고 전문에 다 붙여 버리는 방법도 생각할 수 있는데 실제 출력되는 문장을 보지 않으면 어떻게 조합되는지 모르고 포인터 수정이 많아져서 좀 귀찮아지는 면도 있습니다.  






짠~ 이제 제대로 된 한글이 출력이 됩니다. 물론 폰트가 아닌 그래픽으로 된 부분도 있어서 완전 한글화하려면 그래픽 수정도 함께 해야 하지만 일단은 잘 출력되는군요.



.
.
.
00404105  |. 81E2 FF000000     ||AND EDX,0FF
0040410B  |. 81FA 81000000     ||CMP EDX,81
00404111  |. 7C 12                 ||JL SHORT ad3game.00404125
00404113  |. 8B85 D4FDFFFF   ||MOV EAX,DWORD PTR SS:[EBP-22C]
00404119  |. 25 FF000000         ||AND EAX,0FF
0040411E  |. 3D 9F000000        ||CMP EAX,9F
00404123  |. 7E 28                  ||JLE SHORT ad3game.0040414D
00404125  |> 8B8D D4FDFFFF  ||MOV ECX,DWORD PTR SS:[EBP-22C]
0040412B  |. 81E1 FF000000     ||AND ECX,0FF
00404131  |. 81F9 E0000000      ||CMP ECX,0E0
00404137  |. 7C 51                  ||JL SHORT ad3game.0040418A
00404139  |. 8B95 D4FDFFFF    ||MOV EDX,DWORD PTR SS:[EBP-22C]
0040413F  |. 81E2 FF000000      ||AND EDX,0FF
00404145  |. 81FA FC000000     ||CMP EDX,0FC
.
.
.


어드밴스드 대전략 같은 경우, Charset 수정만으로도 쉽게 한글이 출력되었지만 1, 2바이트 필터링 구문이 존재해서 수정을 안 하면 제대로 출력되지 않는 경우가 많습니다. 거기에 이상한 연산까지 붙어 있으면 사람 미치죠-_- 상기의 것은 어드밴스드 대전략의 것인데 수정을 안 해도 잘 출력이 되는군요. 다행입니다.



이렇게 해서 어드밴스드 대전략의 한글화 테스트가 끝났습니다. 지금 소개한 방법은 일본 18금 게임, 그러니까 소위 말하는 미연시 한글화에 많이 사용되는 방법입니다. 영문 게임의 일본어판을 이용해서 한글을 출력하는 방법에도 응용할 수 있겠네요. (일본판을 직접 구할 필요 없이 해당 업데이트 패치의 아카이브를 풀어 버리면 필요로 하는 것을 대부분 구할 수 있습니다ㅎㅎ) 자체 폰트를 사용하는 경우는 좀 더 어려워서 불가능한 건 아니지만 이 방법을 적용하기 어렵습니다. 1바이트 영문 게임에도 해당이 안 되는군요. 요즘 영문 게임이야 유니코드를 지원하는 경우가 많아 폰트 교체만으로도 손쉽게 해결되지만요 :)



중국 사이트를 돌아다니면서 1바이트 영문 게임을 2바이트가 지원되게 하는 강좌(?) 비슷한 걸 몇 개 보긴 했는데 case by case라 그런지 잘 안 되는군요. 뭐, 궁극적으로 가자면 로더를 통해 함수 후킹하는 쪽으로 가야겠지만 아직은 그럴 실력이ㅋ 사람들이 노하우 공개를 많이 했으면 좋겠습니다 :D 기회가 돼서 제대로 분석해 볼 시간이 마련되면 좋겠네요.

다음번 포스팅에선 중간에 잠깐 언급한 것처럼 fontlink를 이용해 한글화하는 방법을 살펴보겠습니다. 요게요게 또 재미있습니다. 바이오하자드에 이어 외도가 계속되는군요ㅋ

그럼.





어때요, 참 쉽죠?



댓글17

  • 아스라이 2010.09.16 20:31 신고

    오... 오늘도 밥아저씨가...
    답글

  • onion 2010.09.17 01:16

    역시 괴수님...(덜덜)
    답글

  • fongnef 2010.09.17 12:42

    MD어드밴스드 를 너무나 즐겨했기에 98->2001->어드밴스4 로 이어지는 시리즈를 줄곧 지켜봤었읍니다.
    그중 2001이 평이 좋더군요. 하지만 MD시절에 비해 일본어의 압박이 넘 커서 좌절... 언젠가 해 볼 기대만 가지고 하드에 저장중입니다..^^;;

    비공개 결정이라니 넘 아쉽지만 그 열정에 박수를 보내고 싶네요~
    답글

    • NSM53 Project 2010.09.17 15:35 신고

      MD용 어드밴스드 대전략은 메뉴얼이 참 인상적이었죠.
      말 그대로 책이었는데 막상 게임은 제대로 못하고
      메뉴얼만 줄창 읽었습니다ㅎㅎ

      비공개 결정은 댓글로 달기에는 좀 복잡한 여러 사정이
      있어서 그렇습니다. 앞으로 어떻게 될지는 모를 일이지만
      요즘 들어 블로그에 공개한 거 말고는 다 비공개로
      하고 싶은 생각이 드네요-_____-

  • 정지훈 2010.09.18 01:29

    항상 멋진 포스팅에 감탄사만 나오네요^^
    항상 좋은 글 감사합니다.
    답글

  • 2010.09.18 09:36

    비밀댓글입니다
    답글

    • NSM53 Project 2010.09.19 16:21 신고

      카페는 요즘 눈팅만 하고 있습니다.
      요즘 제 닉을 검색하는 분들이 많아서
      신변의 위협을 느껴서 말이죠ㅋㅋ

      말씀하신 거에 대해서는 메일로 따로 보내드리겠습니다.
      나중에 메일 확인해 보세요.

  • 팬입니다 2010.10.30 01:19

    저기 궁금한게 있는데 한글화를 취미생활로서 즐기시는건가요?

    한글화되더라도 공개안하신다고 하는것보니까 궁금해서 ;;...
    답글

    • NSM53 Project 2010.10.30 22:04 신고

      네, 순수한 취미 영역입니다.
      이걸로 영리 활동을 할 수 있는 것도 아니고
      인지도를 높이고자 하는 거라면 최신 게임만
      붙들고 있었겠죠.

      그래서 노하우랄 것까진 아니지만 제가 가진
      관련 정보를 조건 없이 공개하는 건데
      대전략2001은 다소 복잡한 사정이 있습니다.

      솔직히 이 게임 국내에서 구입하신 분도 거의
      없을 건데 한글 패치 공개해봐야 좋은 일만
      일어날 것 같지 않은 점도 고려되었습니다 :)

  • 빨간약 2011.05.05 15:21

    그럼..... 그.. 게임 내 대사는 어떡게.. 하나요?
    답글

    • NSM53 Project 2011.05.18 00:20 신고

      무슨 뜻으로 질문하신 건지 잘 이해가 안 되는데요?
      -_-a

      아, 리소스 에디터로 게임 내 대사를 수정할 수 없다는
      글을 보고 쓰신 것 같네요.

      게임 내 대사는 Hex에디터 노가다나 별도로
      편집 프로그램을 작성하는 방법으로 하면 됩니다.

  • 오구앙 2011.06.01 21:09

    FACENAME같은 경우에는 어떻게 수정해야 하나요?

    보통 PUSH 프로세스명.헥스값 이렇게 되어있잖아요?
    한글폰트로 수정을 어떻게 하는지 궁금하네요.
    답글

    • NSM53 Project 2011.06.06 01:23 신고

      헥스 에디터로 해당 부분을 직접 찾아서
      헥스값을 고쳐도 됩니다.

      ...만 사실 안 고쳐도 별 지장은 없습니다ㅎㅎ

  • 2014.01.22 20:05

    비밀댓글입니다
    답글