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

어셈블리 수정 없이 1바이트 폰트에서 조합형 한글 사용하기

by NSM53 Project 2009.07.27


1바이트 폰트를 사용하는 게임은 256개라는 글자수 제한 때문에 한글화에 어려움이 있습니다. 완성형 글자는 2350개이고 일반적으로 사용하는 글자수가 1000자 내외임을 감안해도 많이 부족한 숫자입니다. 

어셈블리로 확장을 하면 해결되는 문제이지만 프로그래밍을 모르는 사람 입장에선 난감한 문제일 수밖에 없습니다. 프로그래밍을 알아도 리버스 엔지니어링에 도통하지 않다면 역시나 어려운 문제죠.


하지만 한 가지 방법이 있기는 합니다. 바로 윈도용 3벌식 폰트(직결식)의 방법을 응용하는 겁니다.

그런데 가장 중요한 선결 조건이 있습니다.

가변폭을 지원하는 폰트일 것.


위의 스크린샷처럼 고정폭인 경우에는 불가능합니다. 주로 8x8 폰트를 사용하는 게임들이 그렇습니다. 


 

가변폭 폰트를 사용하는 게임이라면 영문판이든 일문판이든 상관없이 공병우 박사님의 3벌식을 윈도 폰트로 구현한 직결식을 응용할 수 있습니다.

http://moogi.new21.org/story15.htm 
이곳에 직결식에 관한 글이 있으니 참고하시면 좋을 겁니다.

자 각설하고, 핵심은 초성, 중성, 종성을 각각 만들고 폭을 조절해 글자가 겹치게 만드는 겁니다. 그러니까 글자 크기는 그대로이고 글자에 할당된 폭을 - 로 만들어서 겹치는 거죠. (글자 자체의 폭을 줄이는 게 아니라 x축 값을 -만큼 이동시킨다는 개념입니다.)

▲ 윈도용 직결식 폰트를 폰트 에디터로 열어 본 모습


게임 한글화는 울티마 같은 특수한 경우를 제외하고는 어차피 입력이 필요없기 때문에 위 스크린 샷의 배열을 그대로 사용할 필요는 없으며 윈도용 직결식 폰트와 달리 받침의 유무에 따라 폰트를 따로 만들어 주면 완성형 폰트처럼도 구현이 가능합니다. (아, 이름을 입력하는 경우가 있긴 하군요-_-)

실제로 PC 게임인 모로윈드, 오블리비언, 폴아웃3가 이러한 방법을 응용해 한글을 구현했습니다.

간혹 확장 아스키 코드 영역을 사용 못하는 게임도 있기는 하지만 완성형 폰트처럼 만들 것이 아니라면 60여 글자로도 가능은 합니다.

그럼 설명만 할 게 아니라 직접 보여드리겠습니다.

샤이닝 포스1 영문판입니다. 보이는 것처럼 가변폭입니다. 대사 부분이 허프만 압축으로 되어 있는데 일반적인 허프만 알고리즘으로는 풀리지 않더군요. 좀 더 찾아봤더니 멀티플 허프만이라나 뭐라나...  그래서 결국엔 못 풀었습니다-_-


어차피 테스트를 위한 것이니 전부 수정할 필요는 없고 'MNO You' 만 수정을 해서 폭을 조절해 보죠.


자 이렇게 'MNO You'가 '곽할'이라는 한글로 나옵니다 :) 수정된 부분이 영문에 겹치는 것도 보이는군요.


윈도용 직결식 폰트와 달리 받침이 없는 폰트를 따로 만들면 이처럼 완성형과 같은 모양도 구현이 가능합니다.

그런데 샤이닝 포스의 경우엔 한가지 문제가 있습니다. 캐릭터 이름을 8x8과 16x16 폰트 둘 다 사용한다는 겁니다. 이럴 경우 8x8 폰트는 직결식을 쓸 수 없기 때문에 16x16에서 표시되는 것과 글자가 달라지는 문제가 있습니다. 

현재로써는 16x16 폰트의 영문을 건드리지 않고 캐릭터 이름을 영문 그대로 쓰는 것 외에는 별다른 뾰족한 방법이 생각나지 않네요.

그리고 또 하나, 글자 하나당 2~3바이트를 필요로 하기 때문에 대사 확장은 필수입니다.

어쨌건 이런식으로도 한글 구현이 가능합니다 :)

앞서 말했지만 콘솔용 게임뿐만이 아니라 윈도용 게임에서도 적용 가능한 방법입니다. (폰트 수정과 폭 설정이 가능하다면 말이죠)

 


 

 

댓글13

  • joogunking 2009.11.16 20:37 신고

    그럼 글자를 자음 모음을 풀어 쓴 다음 좌우폭을 줄여서 글자를 만드는건가보군요. 마치 아래아 한글의 자간을 줄여 겹치거나 글꼴겹침기능과 같은 뭐 그런건가봐요.^^.
    한글화의 세계는 온갖 편법으로 불가능을 가능하게 만드는 것 같습니다. 잘 보고 갑니다.
    답글

    • NSM53 Project 2009.11.17 23:40 신고

      정말 대단한 실력이 있어서 리버스 엔지니어링으로
      출력 방식을 다 뜯어고칠 수 있다면 좋겠지만
      현실적으로 어려운지라 때로는 다양한 꽁수가
      필요하기도 합니다ㅎㅎ

      근데 중국은 정말로 다 뜯어고치더군요.
      땅도 크고 사람도 많으니 인재도 많은가 봅니다.

  • SF2 2010.04.02 11:33

    샤이닝포스2는 직결식이 안되는거 같더군요....
    답글

  • 오리엔스 2011.04.21 15:40 신고

    NSM53님 직결식부분에 대한 질문이 있습니다.
    가변폭폰트의 경우 어떻게 글자사이의 폭을 조절할수 있는지요. 내부코드를 변경하지 않고 폭만 조절하는 방법이 있나요?
    답글

    • NSM53 Project 2011.04.25 23:23 신고

      폰트 주변에 폭에 대한 값을 가진 헥스 코드가
      모여 있거나 폰트 하나하나에 개별적으로 들어가 있거나
      아니면 별도의 파일로 존재하거나 딱히 정해진 경우는
      없습니다.

      다만 랜드스토커처럼 폰트 크기에 따라서
      자동적으로 폭을 조절하는 게임도 있어서 불가능한
      경우도 존재하기는 합니다.

  • 장호준 2011.04.21 21:04

    저도 울티마7 룬문자 명판/목판/비석의 한글화를 해결할 방법을 찾지 못해서 고민하고 있었습니다. 저 방식을 쓰면 가능할 수도 있겠네요. 다만 "폭을 조절한다" 라는 것이 어떻게 가능한 것인지가 이해하기 어렵습니다.
    ===========
    아...
    무슨 뜻인지 알 것 같습니다. 오늘 한번 시도해봐야겠군요. 좋은 영감을 주셔서 감사합니다.
    답글

    • NSM53 Project 2011.04.25 23:25 신고

      폭을 조정한다기 보다는 x축 값을 -로 만드는 거라고
      보는 게 좀 더 맞는 표현이려나요?

      메일 내용 확인했는데 일단 성공하셨다니
      축하드립니다!

      역시 열정이 있으면 돌파구는 있나보네요 :D
      조만간 또 재미있는 꽁수 하나를 알려드리겠습니다.
      별 효용은 없을 것 같지만요ㅎㅎ

  • 장호준 2011.05.02 23:16

    일단 직결식 조합을 이용해서 목판글을 완성하기는 했습니다.
    http://wonst719.cafe24.com/zbxe/u7_board_old/56608

    일전에 말씀드렸다시피
    받침이 있으면 다음 글자와 원치않는 띄어쓰기가 이루어지기 때문에
    일단 받침이 없이 글자를 쓴 후에
    받침을 뒤에 일괄적으로 붙인 후
    자간 간격을 주먹구구로 보면서 계산해 벌리는 방식을 썼습니다.

    완성품은 그럭저럭 볼만 합니다만
    문제는 시간이 너무 많이 걸린다는 겁니다 ...
    목판은 그래도 글자가 적었는데
    비석글은 정말 문제가 심각합니다 ...
    (목판글 하나 만드는데 5번의 시행착오가 필요하고 대략 3분이 소요됩니다)

    그래서
    근본적으로 문제를 해결할 수 있는 방법이 없는지
    자문을 구하겠습니다 ㅠㅠ
    =====
    질문의 핵심
    1. X축의 값을 -로 만드는 것은 가능하다
    2. 하지만 글자의 폭만큼이 "원래 있어야 할 자리"에 있는 것으로 인식되어 다음 글자의 시작점이 결정된다.
    3. 그래서 초성 + 중성 + 종성을 조합하는 것은 가능하지만 그 다음 글자는 종성의 폭만큼 띄워진다

    ㄱㅏㅁㅅㅏㅎㅐ요 : 이 글자를 직결식으로 조합해도

    ㄱㅏ _ ㅅㅏㅎㅐ요 : 이렇게 된다는 말이죠



    기존에는

    ㄱㅏㅅㅏㅎㅐ요 + 받침(X축 마이너스 왕창)

    의 방식으로 해결했습니다.
    답글

    • NSM53 Project 2011.05.18 00:05 신고

      일전에 제가 메일 보내드린 후로는 저도 아직
      별다른 확인을 못 해보고 있습니다.

      직접 확인을 해봐야 할 것 같은데
      주말에나 가능할 것 같네요.
      여튼 최대한 확인해봐서 호준 님이 완벽한
      울티마 7 한글화를 이루시는 데 도움이 되었으면
      좋겠습니다 :D

    • 장호준 2011.05.18 04:46

      제 결론은 이렇습니다.

      울티마 7에서 사용되는 영문 폰트는
      폰트의 형식만 따랐을 뿐 실제로는 그림이다.

      시작점을 -로 설정하는 것은 가능합니다만
      폭을 지정하는 것이 불가능합니다.

      결국 노가다 이외에는 해결 방법이 없지 싶습니다 ㅠㅠ

  • 디지츠 2011.05.03 10:25

    그러고보니 패미콤용 드래곤볼 Z2는 그냥 풀어쓰기 방식으로 한글화를 진행했더군요. 그래도 감회가 새로웠습니다. 옛날엔 스토리는 하나도 모르고 했는데 감회가 새롭새롭..
    답글

    • NSM53 Project 2011.05.18 00:07 신고

      풀어쓰기도 초창기 한글화의 한 방법이었죠.
      그러다 반조합도 나오고 직결식 응용도 나오고
      이래저래 발상의 전환으로 점점 발전적인 방법들이
      제시되고 있는 것 같습니다.