몇 번 언급했던 적이 있는데 유니코드를 지원해서 폰트만 조금 손봐주면 한글을 출력할 수
있는 최신 영문 게임과는 달리 도스 게임이나 2000년도 초반까지의 윈도 게임들은 대부분이
1바이트 출력만 되기 때문에 로우 레벨 프로그래밍적인 접근이 아니면 사실상 한글화가
불가능하다고 할 수 있습니다.

대게는 이런 경우 텍스트 후킹으로 자국어화를 하는 경우가 많습니다. (특히 중국)
일본에서 이런 1바이트 영문 게임의 비공식 자국어화를 할 때 어떤 방법으로 멀티바이트
출력을 구현할까 궁금해서 종종 찾아보는 경우가 있는데요, Thief는 상당히
독특한 방법으로 멀티바이트 출력을 구현하더군요.

시프의 일본어화 사이트는 http://sites.google.com/site/skimafork/ 이고
해당 사이트에 기술되어 있는 시프의 일본어 출력에 관한 글을 번역해 보았습니다.



양피지, 책에 쓰인 텍스트의 일본어화

Thief의 Dark Engine은 멀티바이트 문자를 인식하지 못하므로 한자를 포함한 일본어를
일반적인 방법으로는 표시할 수 없다. 그래서 1x1 픽셀의 문자를 빈틈없이 늘어놓아
도트 그림으로서 일본어 문자를 표시할 수 있게 한다.

본편의 책이나 양피지의 문자에 사용되는 폰트 포맷은 1픽셀당 8비트의 알파값으로
표현되는 픽셀맵이므로

1. 0x30 ~ 0x3F 범위에 0 ~ 0xFF까지의 알파값을 갖는 도트 문자를 할당한 폰트를 작성
2. 작성한 폰트를 해당 Thief 폰트와 교체한다.
3. 미리 어떠한 형태로 랜더링해둔 문자열의 이미지를 읽어 대응하는 색의 도트 문자를
   늘어놓은 문자열로 교체한다..
4. 교체한 결과를 문자열로서 게임이 인식하게 한다.

와 같은 순서로 일본어를 표시한다. 텍스트의 반환 처리는 렌더링 시점에서 끝낸다.



인터페이스의 일본어화

인터페이스에 사용된 폰트에는 책이나 양피지처럼 1픽셀당 8비트의 알파값을 갖는
폰트와 비트맵에서 표현되는 폰트, 2종류가 사용된다. 전자는 책이나 양피지의 폰트와
같은 포맷으로 메인 메뉴의 'NEW GAME'... 등의 버튼에 사용되는 폰트
(FONTAA**.FON), 후자는 키 설정이나 세이브 데이터명, 미션 중의 문자열 표시
(New Objectives 등), 아이템명에 사용되는 폰트.

전자의 일본어 표시에는 문제가 하나 있다. 책이나 양피지와 같은 포맷의 폰트를
사용하기 때문에 동일한 방법으로 일본어 표시를 할 수 있다고 생각해서 실제로 시도해
보았지만 메뉴의 인터페이스용 문자열의 길이에는 제한이 존재하는 듯하고 지나치게
긴 문자열을 읽으면 게임이 다운됐다. (도트 문자로 표현된 문자열은 원래의 몇십배
길이가 된다.) 그래서 메뉴 부분에는 각 폰트의 비어 있는 코드(0x40 이후)를 할당해
대응하는 문자열의 화상을 폰트에 짜 넣는 것으로 대응한다. (메뉴 수는 그다지 많지
않으므로 폰트의 모든 코드를 사용하는 일은 없을 것이다.)

후자의 폰트에는  비트맵 폰트만 쓸 수 있는 것 같으므로 0x80 ~ 0xFF 범위에 7비트의
바이너리 패턴이 정렬된, 1x7 픽셀 문자를 할당한 일본어 표시용 폰트를 만든다.
처음에는 도트 문자를 사용하려 했지만 또 문자열 길이 제한에 걸려서 이런 형태가
되었다.  0 ~ 0x7F까지의 부분은 원래의 폰트(SMALFONT.FON)를 7픽셀 높이로
줄인 것을 유용한다. 또, 비트열의 문자자와 UI가 생성한 문자열을 동시에 표시할 때
(성수를 사용했을 때의 표시-Holy Water Arrow 0:00:13- 등)에 문제가 일어나므로
적당히 비어 있는 코드를 문자열 화상에 할당한다.



회화의 알본어화

게임 케릭터가 회화하는 장면에 자막을 붙여 일본어화한다.

Thief 1/2용 커스텀 스크립트 중 하나인 Public Script
http://whoopdedo.org/doku/public_scripts/index
의 Intrinsic Text를 사용해 회화마다 텍스트를 표시. 이것은 미션 파일을 편집해야 한다.


 

개념은 잡히는데 실제적으로 어떻게 작업을 하는 건지는 조금 막막하네요.
제가 그래픽쪽에 조예가 없다보니 알파값을 이용해 폰트를 편집하는 것에 대해서는
감이 잘 안 옵니다.


시프를 갖고 있지 않아서 일본어 패치와 원본을 비교해보지는 못 했고 시프 폰트 변환툴에
포함되어 있는 폰트와 비교해보니


원래는 이렇게 되어 있는 영문 폰트가

 


일본어 패치에서는 이렇게 도트로 바뀌었습니다.
 



비트맵 폰트를 사용하는 부분은 글자 수 제한 때문에 1x7 폰트를 사용했다고 하죠.




다이얼로그가 들어 있는 걸로 예상되는 파일에는 영문이 아니라 전부 이런 헥스값으로
바뀌어 있습니다. 본문에 있는 것처럼 '미리 어떠한 형태로 랜더링해둔 문자열'
'문자로 표현된 문자열은 원래의 몇십배 길이가 된다' 라는 게 이걸 말하는 것 같군요.
아스키 영역 중 0x30 ~ 0x3F에 도트를 할당했으므로 해당값만 보입니다.

어쨌든 이걸 읽어서 저 도트로 바뀐 폰트(?)로 글자를 만든다..가 주된 골자인 것 같습니다.




시프와 동일한 방식의 폰트를 사용하는 게임으로는 시스템 쇼크 2가 있습니다.
직결식과 더불어 상기 방법에 대한 분석이 이루어진다면 일부 1바이트 영문 게임
한글화에 대한 또 다른 대안이 될지도 모르겠습니다.


Posted by NSM53 Project