"누구나 잃을 게 있습니다. 잃기 전까지 모를 뿐이지." – 송곳

2024/01/17

천지창조
엘: …왜 그래 아크? 엄청 끙끙 데고 있었어.

어릴 때 천지창조라고 슈퍼 패미컴 게임을 한 적이 있는데요. 당시 기억이 하나하나 나는 건 아니지만, 컴퓨터 에뮬로 했던 거 같은데 상당히 재밌게 플레이한 기억은 남아 있습니다. 이번에 아날로그 포켓도 생겼겠다 각 잡고 다시 한 번 해보려는데 이왕 하는 거 한글로 보자 해서 비공식으로 한국어 패치 된 롬을 플레이 해봤습니다(당시에도 똑같은 롬으로 했던 것 같네요).

추억 보정이었을까요. 당시에는 어릴 때라 그랬는지 그냥 마냥 재밌게 하면서 별로 못 느꼈던 거 같은데, 지금 와서 해보니 오프닝 첫 문장부터 번역체 같고 해서 상당히 신경 쓰이더군요. 뭐 알아만 들으면 되겠지 하고 해보는데 아아 이것이 이제는 늙어서 그런가 대사를 보면 볼수록 넘모나 신경이 쓰여서 집중이 한 개도 안 되는 건 어쩔 수가 없네요. 인터넷에 좀 찾아보니 전체적인 번역 품질이 아예 오역도 있는 것 같고 다른 부분도 그렇게 좋지는 않은가 봅니다. 네 그래서 직접 원본을 한글 출력하게 해보기로 했습니다. 위에서 말한 롬은 유럽판을 패치한 롬이였는데 그걸 수정하는 건 작업하신 분에 대한 예의는 아닌 것 같아서 저는 일어판으로 처음부터 해보기로 했습니다.

엘: 아크가 그런 말을 한다니 별일이네.
일어나서 밖에 한 번 나가보지그래? 크리스털 블루가 날아다녀서 아주 예뻐.
악몽 같은 건 금세 잊어버릴 거야.
영문판도 확인해 봤는데 내용은 일어판과 크게 다르지 않았습니다. 그런데 한국어는…

이제는 2 정도는 알지만, 프로그래밍을 1도 모르던 아주 예전에 몇 번 호기심에 한글 적용된 롬을 열어서 한두 글자 바꿔본 적은 있는데 너무 오래전이라 해봤다는 기억 말고는 거의 다 잊어버리고 본격적으로 해 본 적은 없어서 하나도 뭐가 뭔지 몰루겠네요. 일단은 인터넷에 있는 정보들 이거저거 보고 따라서 해보는데 폰트 찾는 것부터 안 되네요. 이런 작업에 많이들 쓰는 툴로 맨땅에 헤딩을 어브버 하다가 어떻게 폰트 비스므리한 거는 찾았는데 그림을 조각내서 막 섞어 놓은 모양으로 나와서 이걸 하나하나 조합해서 글자를 만드는 건가 또 어브버하다가 타일 크기니 포맷이니 정렬 순서니 맞춰야 하는 걸 알고서 이래저래 해보는데 드디어 가나랑 한자 등 폰트가 제대로 보이는군요.

좌: 어… 뭔가 글자 같기는 한데 / 우: 포맷, 패턴 맞춘 뒤

폰트는 찾았으니 이제 대사를 찾아야 하는데 인터넷에 올라온 강좌들을 보니 대사가 일본어 텍스트 그대로 적혀있길래 여기도 인코딩을 shift-jis로 맞춰서 보면 나오겠지 하고 보는데 제가 프로그래밍은 2 정도 알지만 일본어는 3 정도 알아서 간단한 문장 정도는 일본어 가나 같은 게 있으면 뭔가 찾을 거 같았는데 당연하게도? 없습니다?? 어??? 당연히 euc-kr은 아니겠고 유니코든가 하고 바꿔서 해보는 데 없네요. 알아볼 수 있는 게 하나도 안 나와요. 요새 노안도 살짝 오는 거 같은데 혹시 너무 브루투하게 눈으로 찾아서 그런가 싶어 shift-jis 코드표 펼쳐놓고 게임에 나오는 대사 중에 몇 글자만 코드 조합해서 찾아보는데 그래도 없네요.

다시는 1990년대 게임을 무시하지 마라.

그럼 반대로 폰트 글자 이미지 타일 주소를 조합하면 되지 않을까 해서 다시 몇 글자 조합해서 찾아보는 데 없다고만 나오네요. 주소를 뭔가 잘못 넣었나 싶어서 다시 맨땅에 어브버 하는데 아무리 해도 안 되네요. 그렇다면 남은 건 직접 코드표 만들어서 사용했다는 소리니까 바이너리 백날 봐야 답 없을 거 같아서 구글에 찾아보니 미쿸 선배님(사실 미국인지는 모르겠음 영어쓰니 아무튼 미국임)들이 이미 분석해 놓은 것들이 있더군요. 대사에 맞춰서 코드 조합해서 찾으니 드디어 나오네요. 짧게 하니 후보가 많아서 좀 더 늘려서 찾으니 딱 하나 나오는군요.

사실 폰트 글자 등장 순서대로 번호 맞춰봤으면 금세 찾았을 텐데 그 생각을 못했네요. 여하튼 찾은 대사 바이너리를 보니 중간중간 코드표에 없는 것들도 있던데 이것도 보니 대사 시작이나 딜레이 같은 조작 코드여서 일단 손으로 짤막한 대사 전체를 코드 맞춰서 분석을 좀 해보고 구조를 확인했습니다. 그런데 이렇게 게임을 켜놓고 대사 하나하나 보면서 하려면 직접 진행을 해야 다른 대사를 볼 수 있으니 이래서는 너무 오래 걸리니까 일단은 바이너리를 게임 문자 코드에 맞춰 텍스트로 변환되게 해서 보기 쉽게 만들어주는 컨버터를 만들기로 합니다.

선배님들이 만들어 두신 코드표를 참조해서 바이너리 값을 코드에 맞춰 해당하는 뜻으로 바꿔서 띄워 봤습니다. 몇몇 조작 코드는 어디에 쓰는 건지 모르겠는 것들도 있기는 한데 목적은 일어 번역이라 대사 부분만 대충 알아볼 수 있게 작업을 했습니다.

바로 위에 있는 스크린 샷의 텍스트 내용입니다. 다섯 째줄 ‘その星は’로 시작하는 부분이 오프닝 텍스트입니다.

위의 스크린 샷은 컨버터를 이래저래 수정을 좀 한 뒤의 화면인데 처음에는 몇몇 이름 같은 부분이 안 나와서 으엉? 하다가 조작 코드를 좀 더 보니 이름을 매번 대사에 직접 쓰는 게 아니고 대사에는 참조 번호만 적고 인 게임에서는 미리 정해둔 곳에 있는 이름을 번호로 찾아서 띄우는 방식으로 구현한 것 같더군요. 아마도 카트리지 메모리가 한정되어 있어서 이름처럼 자주 나오는 부분은 최대한 줄이려고 이렇게 한 것 같네요. 이제 대사 출력 기능은 어느 정도 되었으니 게임 가장 처음 부분 대사를 찾아 바이너리를 고치고 대사가 바뀌어서 나오는지 확인해 봅니다.

좌: 원본 / 우: 수정 후

잘 나오는군요. 대사 출력은 모두 확인했으니 이제는 단순 노동의 시간 이네요. 롬 파일 바이너리에서 전체 대사를 추출하고 이걸 제가 할 수 있는 부분은 직접하고 헛갈리거나 모르겠는 부분은 deepl을 쓰든가 해서 가능한 번역을 한 뒤, 이 번역된 대사에서 한글 개별 글자 수 및 글자별 중복 수를 파악해서 일본어 가나와 한자 수에 맞춰서 한글도 숫자를 맞추고 다시 대사를 다듬고 얼추 다듬어지면 가나와 한자 폰트 이미지를 한글 폰트 이미지로 바꾸고 바뀐 코드와 대사에 맞춰서 바이너리로 변환하고 이걸 기존 데이터에 덮어씌워서 인게임에서 문제없는지 확인하고 완성될 때까지 반복하면 될 것 같네요.

라고 생각하고 잠시 다른 걸 하다가 다시 봤을 때 문제가 좀 생겼습니다. 한글은 못해도 1500자가 들어갈 공간이 필요한데 롬에서 폰트가 사용 중인 부분은 전부 합치면 1310자 정도 되네요. 이마저도 숫자, 영어, 특수문자를 빼면 더 줄어드니 못 쓰는 글자가 필히 나올 것으로 보입니다. 대사를 최대한 바꾸거나 하면 되지 않을까 싶기는 한데 아직은 번역이 다 안 되어서 모르겠군요. 그래서 여기저기 찾아보다가 롬파일 용량 자체를 늘려서 추가 공간에 폰트를 사용하는 방법이 있던데 어셈블리를 직접 수정을 해야 해서 하려면 어셈블리는 1도 몰라서 시간이 좀 걸릴 것 같네요.

그리고 또 하나 문제가 원본 게임이 폰트가 가나, 영어, 숫자, 특수문자는 1바이트로 포인터가 되어 있는데 한자는 2바이트로 되어 있습니다. 한글은 당연히 대부분 글자가 2바이트 공간에 들어갈 것이므로 대사에 한자 수가 적거나 아예 없는 경우 대사 공간을 절반밖에 쓸 수가 없어서 대사를 대폭 수정해야 합니다.

[C7FF]      その星は[CF]   二つの心を持っていた[D4]

다음은 위의 스크린 샷처럼 게임 시작 시 가장 처음에 나오는 텍스트인데 앞뒤 대사 제어코드를 빼고 중간 텍스트와 줄 바꿈 제어코드를 합쳐서 세어보면 28바이트를 사용하고 있습니다. 이를 그냥 번역한다면 다음과 같이 됩니다.

[C7FF]      그 별은[CF]   두 개의 마음을 가지고 있었다[D4]

한글은 모두 2바이트라고 가정하면 45바이트가 필요합니다. 앞에 공백을 빼도 36바이트여서 8바이트나 모자랍니다. 이제 대사를 최대한 수정해서 28바이트에 딱 맞춰보면 다음과 같이 됩니다.

[C7FF]    그 별은[CF]두 마음을 가졌다[D4]

뜻이 틀린 것은 아니나 생략이 좀 들어가서 원문과 약간의 차이가 생겼습니다. 이런 식으로 하면 어떻게든 할 수는 있습니다. 그리고 한자 앞쪽 1바이트 폰트도 사용할 수 있어서 자주 나오는 글자를 그쪽에 배치하면 바이트를 약간 더 사용할 수 있으니 몇 글자 더 넣을 수도 있을 겁니다.

이것도 또한 대사확장이라고 롬파일 확장으로 늘어난 남는 공간에 대사 전체를 옮겨서 포인터를 바꾸는 식으로 할 수 있는 것 같은데 다른 분들이 올려놓은 게시글 보면서 하나하나 해보는데 어떻게 포인터를 옮기고 하는 것까지는 했는데 중간에 포인터가 다시 돌아오면서 잘못된 곳을 참조해 아무것도 없는 곳을 열어서 대사가 아예 안 나오고 그래서 이 방법은 일단 어셈블리를 좀 더 보고서 시도하던가 해야 할 것 같네요. 이래저래 안 되는 머리로 해보고 있어서 언제가 될지는 모르겠지만 어느 정도 진척이 되면 그때 다시 글을 써 보도록 하겠습니다.

댓글 남기기 | cat > 타닥타닥 | tag >

댓글 남기기

* 표시된 곳은 반드시 입력해주세요