KOEI/삼국지 시리즈

삼국지4PK 일판에 한글을 출력시키는 과정. (1부)

K66Google 2022. 3. 4. 12:53

삼국지4 파워업키트는 우리나라에 도스판과 윈도우95판 두 종류로 발매된 적이 있다.

도스판은 도스박스를 통해 구동이 가능하지만, 윈도우95판은 실행파일이 32bit임에도 불구하고, 윈도우10에서 바로 실행되지 않는다. DDrawCompat 패치까지 하면 게임 실행은 가능하지만 검은 화면에 게임 창만 덩그러니 열려있는 살풍경한 모습으로 플레이할 수 밖에 없다. 그리고 BGM 재생을 하려면 CD를 반드시 삽입해야 하므로, 완벽히 구동하는데 애로사항이 이만저만이 아니다.

그러므로 삼국지4PK도 스팀판 실행파일을 뜯어고쳐서 한글이 출력되도록 하는 수밖에 없다.

 

 

 

1. 저장 폴더 문제

 

삼국지4PK를 스팀 런처로 실행하니 '데이터 파일 오픈에 실패했습니다' 라는 문구가 뜨고 무장 얼굴도 제대로 표시가 안 되는 등의 문제가 발생하였다.

이 문제는 인터넷에 이미 알려져있는 Locale Emulator의 일본어 로케일 모드 실행으로 해결하였는데, 그렇다면 왜 일본어 로케일 모드에서만 정상 실행이 가능한 것일까?

 

바로 게임 저장 폴더 때문이었다.

삼국지4PK와 5PK 스팀 저장 폴더는 '三國志Ⅳ with パワーアップキット' 와 '三國志Ⅴ with パワーアップキット' 이다. 여기서 '가타카나 장음 부호'(ー) 에 주목할 필요가 있다.

일본어 로케일(Shift-JIS)에서 가타카나 장음 부호의 헥스 값은 0x815B이다.

그런데 한국어 로케일(CP949)에서 0x815B에는 글자가 할당되어 있지 않다. 그래서 한국어 로케일에서 삼국지4를 실행하면 나머지 한자와 일본어는 해당 헥스 값과 일치하는 뷁어로 바뀌지만, 가타카나 장음 부호는 뷁어로도 못 바뀌고 ?로 인식되게 된다. 이 때문에 게임은 자기가 찾아가야 할 게임 폴더를 찾지 못하고 '오픈에 실패했습니다' 라는 오류만 내뿜게 된다.

따라서 한국어 로케일 환경에서 정상적인 실행을 하려면 먼저 게임 실행 파일 내의 저장 폴더명 부터 바꿔줄 필요가 있었다.

 

* 결론

0xEC2E0 대역의 '三國志Ⅳ with パワーアップキット' 를 '삼국지Ⅳ with 파워업키트' 로 변경.

 

 

 

2. 프로그램 로케일 변경 / 반각 필터링 제거

깜빡하고 스샷을 못 찍어서 그냥 글로 대신한다.

스팀리스로 실행파일 헥스변경 감지를 못 하게 한 다음, Ollydbg로 수정한다.

 

- 프로그램 로케일 한국어로 변경 (CreateFontA)
00434A3A : PUSH 80 -> PUSH 81

(나중에 실행파일 내의 'MS 어쩌구' 를 '굴림체'로 수정함.)

- 반각 필터링 제거
0047909C : CMP ECX, 0x9F -> CMP ECX, 0xC8
004790AD : CMP ECX, 0xE0 -> CMP ECX, 0xA1
004328DA : ADD EAX, 0xE1 -> ADD EAX, 0x161
004328EF : ADD ECX, 0x161 -> ADD ECX, 0xE1

004A60B4 : CMP EAX, 0x9F -> CMP ECX, 0xC8

 

- 반각 가타카나의 전각 히라가나 강제 변환 해제
(0xDF로 검색함.)
0048BC0B : CMP EAX, 0xA6 밑의 JL을 JMP로 변경.

 

다행히 삼국지5PK처럼 코에이의 함정 코드는 발견되지 않았다. 이렇게 하니 한글이 모두 정상출력 되었다.

밑 부분이 안 잘리고 또렷하게 출력되었기 때문에 높낮이 패치를 할 필요도 없었다.

 

 

 

3. 신무장 이름 입력 개조

 

신무장 입력 처리는 삼국지5PK와 유사한 점이 있어서 동일한 방식으로 개조하였다.

개조에 대해서는 삼국지5PK 한글 출력 과정 1부의 4번 단락을 참조할 것. (링크)

 

 

이렇게 해줬더니 또 '힙' 자 까지만 나온다. 0xFD와 0xFE 대역의 글자들이 나오지 않는 것이다.

 

 

그래서 의심되는 코드를 찾아서 수정하기로 하였다.

 

* 결론1

004A62F2 : CMP ECX, 0xFD -> CMP ECX, 0xFF로 수정.

 

 

이렇게 하니 글자 목록에 정상적으로 출력은 된다. 하지만 막상 클릭하면 0xFE로 끝나는 글자들은 ?로 입력이 되는 문제가 발생한다.

이건 어떻게 해야 하나...

 

 

일단 글자 목록이 'あいうえお' 로 표시되는 것부터 고치기로 한다. 처음에는 실행파일 안에 있는 줄 알고 헤매다가 Ollydbg 상에서 겨우 찾아냈다. 여기 값들을 '가걺괌굴깔...' 으로 고친다.

일본어 전각 코드인 0x8140은 처음에는 0xA1A1으로 고쳤으나, 이름 목록에 제대로 출력되지 않았다. 0xE1A1으로 바꾸니까 겨우 정상적으로 출력되었다.

 

* 결론2

0x4A64C6 대역의 일본어 50음도순 목록명을 한국어 가나다순 목록명으로 알맞게 고친다.

 

 

이건 됐고... 그래서 0xFE로 끝나는 글자들을 클릭하면 ?로 나오는 문제는 어떻게 해결할 것인가?

 

TextOutA에 브레이크 포인트를 걸고 있어보니까, 0xFE로 끝나는 글자들은 0x7E로 바뀌어서 들어오는 걸 확인할 수 있었다.

 

그래서 TextOutA로 값을 넘겨주기 직전에, 뒷 바이트가 0x7E라면 무조건 0x80을 더해서 0xFE로 바꾸기로 하였다.

이미 삼국지5PK 한글 출력 과정 2부(링크)의 6번 단락에서 소개한 적이 있는데, 사실 이 방식은 삼국지4PK에서 먼저 적용하고 나중에 5PK에 써먹은 것이다.

 

* 결론3

0043290C : CALL 004D52A4 로 변경.

 

004D52A4 : AND ECX,0xFF (원래 0043290C에 있었던 코드)
CMP CL, 0x7E
JNZ 004D52B2
ADD CL, 0x80
RETN

 

이렇게 하면 0xFD로 끝나는 글자도 정상적으로 입력되고 출력된다.

 

 

 

4. 실행파일 한글화

 

이제 한글화를 막고 있는 걸림돌은 '메시지 용량 제한 여부' 이것 밖에 없다.

이쯤에서 실행파일 한글화를 해본다.

 

게임 화면에서 군/민/장/무 아이콘을 눌렀을때 뜨는 정보와 관련된 텍스트는 0xE1F70 대역에 바이트 플립 상태로 들어가 있었다.

이것만 따로 찾아야 했고, 나머지는 평범하게 실행파일 안에 들어가있었다.

 

 

 

5. 무장열전 세로 길이(높이) 조정

삼국지4PK의 무장열전도 5PK처럼 아래쪽의 내용이 짤리고 있어서 창 크기 변경이 꼭 필요하다.

 

삼국지4PK의 무장열전은 장수 능력 정보 밑에 끼어서 나오는 형태로 되어있다. 열전이 없는 장수는 능력 정보만 나오는 걸로 보아하니, 창 크기를 따로 계산하고 있는 것 같다는 생각이 들었다.

 

...노가다 끝에 무장열전 크기 조정 위치를 알아냈다. (노가다 방법은 삼국지5PK 한글 출력 과정 1부 5번 단락을 참조.)

0x72C6068 B2 00 00 00 / 68 18 01 00 00 (높이 178 x 너비 280) 이었다.

여기서 높이를 68 E2 00 00 00 으로 바꿔준다. 그러면 높이가 226px로 바뀌면서 모든 내용이 보이게 된다.

 

 

 

6. 영상 한글화

 

삼국지4PK 스팀판의 오프닝/엔딩은 PC98 버전이라서 기존에 정발된 윈도우판의 오프닝/엔딩과는 다르다.

삼국지4PK의 오프닝과 엔딩에는 일본어 텍스트가 들어가 있기 때문에, 영상 한글화는 꼭 필요하다. 그래서 포토샵과 프리미어 프로를 이용하여 영상 한글화 작업을 실시하였다.

보다 자세한 내용은 삼국지5PK 한글 출력 과정 2부 8번 단락을 참조하면 된다.

 

 

- 스크롤 압박으로 인해 2부에서 계속 -