KOEI/삼국지 시리즈

삼국지 1편, 2편에 한글을 출력시키기 위한 삽질기록. (2부)

K66Google 2022. 4. 20. 19:15

- 1부에 이어서 계속... -

 

 

5. 삼국지1 PC98 디스크 분석

 

삼국지2는 잠시 접어두고 먼저 삼국지1부터 한글화에 도전하기로 한 나는, 먼저 삼국지1편의 A디스크/B디스크에 있는 파일부터 다 끄집어내고 하나하나 분석해보기로 하였다.

KANJIF.DAT와 USKCG.SYS라는 파일의 너비를 16으로 조정하니, 게임 상에 쓰이는 몇몇 한자들이 보였다. 아무래도 Shift-JIS의 정규 한자 목록이 아닌 한자들을 넣어둔 것으로 추정된다. 목적은 장수 이름 표기 등을 위해서겠지.

 

 

그 다음으로 살펴볼 것은 B디스크의 SAVEDATA다.

이 파일에서 육안으로 관찰할 수 있는 건 장수 이름의 반각 가타카나 표기인데, 표기가 중복되는 횟수가 15회인 걸로 봐서 세이브 10개 + 시나리오 5개에 해당되는 데이터로 추정된다. 즉, 삼국지1은 하나의 파일에 세이브 파일과 시나리오 파일이 합쳐져 있다는 것이다. 그래서 그런지 다른 게임들에 있는 무슨 저장 디스크를 작성하네 뭐네 하는 메뉴가 삼국지1에는 없다.

아무튼, 맨 처음에 나오는 장수 이름은 조조(曹操)인데, 曹操는 Shift-JIS 코드로 91 82 / 91 80이다. 두 값의 차이는 2다.

그런데 조조의 반각 가타카나 표기에서 약간만 밑으로 가보면, 62 41 / 60 41 이라는 값이 있다. 62... 60... 여기에도 2밖에 차이가 나지 않는 부분이 있다. 매우 수상하기 짝이 없다.

 

 

일단 가타카나 독음 부위의 값을 바꿔보니, 한자 영역의 글자를 입력해도 출력이 잘 되는 것이 확인되었다.

Shift-JIS 코드를 따르고 있는 것이다.

가타카나 독음 범위 밑 쪽에 있던 헥스 코드는 한자 표기를 담당하는 것으로 추정되며, Shift-JIS가 아닌 독자적인 고유 코드를 따르는 것 같다.

 

 

이제 한자 표기용 고유 코드에 대해 분석해야 한다. 답은 노가다 밖에 없다. 계속 바이트를 바꿔가면서 무슨 한자가 뜨는 지 확인하는 것이다.

수정하고 저장하고 실행하고 확인하고... 무슨 아나바다 운동 구호처럼 삽질해야 한다.

여러번 하다 보면 대강 규칙성이 발견된다.

 

1. Shift-JIS로 뒷 바이트가 40, 9F이면 고유코드 앞 바이트는 21이다.

2. Shift-JIS로 뒷 바이트가 7F, FD, FE, FF이면 고유코드에서 취급하지 않는다.

 

아무튼 그렇게 삽질을 하다보면...

 

 

어느 순간 '가' 자의 고유 코드도 알아낼 수 있게 된다.

 

 

고유 코드가 규칙적이므로 엑셀을 이용해서 Crystaltile2용 폰트 테이블을 만든다.

(엑셀에서 텍스트로 내보낼때는 '유니코드 텍스트'로 한다.)

 

 

 

'Shift-JIS용 고유번호 테이블'과 '한글폰트용 고유번호 테이블'. 이렇게 두 개를 출력시켰다.

이제 장수 이름 쪽부터 한글화에 들어간다.

 

 

 

6. 삼국지1 장수 이름 한글화

 

장수 이름 한글화때는 Crystaltile2의 '복구' 기능을 적극적으로 사용했다.

'복구' 로 번역되어 있지만, 사실 이건 '바꾸기' 기능이다. 이 기능을 쓰지 않으면 수많은 단어들을 일일이 고쳐야 하는데, 그럴 엄두가 나지 않는다.

 

 

Shift-JIS의 정규 한자가 아닌 것들은 KANJIF.DAT에서 취급하는 게 맞았다. 20 76... 21 76... 이런 식으로 독자적인 고유 코드를 쓰고 있다는 것을 작업 중에 확인할 수 있었다.

 

 

아무튼 이런 식으로 하나하나 장수 이름들을 바꿔나간다.

 

 

그리고 마침내 모든 장수 이름의 한글화가 끝났다.

 

 

 

7. 제1차 고유코드와의 전쟁 (삼국지1 명령표 관련)

 

장수명 번역은 끝났고, 실행파일 내에 있는 텍스트 한글화에 들어가기로 하였다.

그런데 여기에서도!!! 명령표나 일부 문장들이 정규 코드인 Shift-JIS를 쓰지 않고 독자적인 고유 코드를 쓰고 있다.

젠장... 여기서 또 삽질해야 된단 말인가...

 

 

삽질 끝에 '겨튼'을 겨우 '이동'으로 바꾸어주었다.

 

 

이것이 해당 부분의 고유 코드를 분석한 매칭표다. 시간들여서 분석해놓았으니, 나중에 요긴하게 쓰이길 바래야지.

 

 

좋다. 그럼 명령표는 모두 이 고유코드를 따르는... 줄 알았는데...

아니 이건 또 왜 달라지는 거야!!!

고유코드가 바뀌어서 위에서 분석한 코드표와 매칭되지 않았다. 겨우 삽질을 통해 올바른 한글로 바꾸었다.

회고하는 시점으로 이 글을 쓰고 있는데도 당시의 안개 속에서 헤매는 기분이 아직도 느껴진다.

도대체 며칠 전의 나는 어떻게 여기를 수정했던 것일까?

 

 

아마도 이런 심정이 아니었을까?

 

 

- 스크롤 압박으로 3부에서 계속 -