소프트웨어 지식으로 할 수 있는 일들/한국어 패치 개발

뱀파이어 더 마스커레이드: 블러드라인(VtMB) 1 번역 및 국문출력 패치 #5

souldeveloper 2026. 1. 4. 23:20

로딩스크린의 텍스트, 그리고 캐릭터 생성 위저드 텍스트를 모두 번역했다. 본문, 그리고 세계관에 대한 이해가 필요한 부분들은 아직 진행 중이다.

 

현 단계에서는 아래의 사항을 해결하고 있다. 검수팀을 모집하여 도움을 받아 해결하는 게 좋은 부분도 많다.

1) 게임을 진행하면서 알게 되는, UI 구성요소 텍스트 (e.g. 'bump'가 알고 보니 3D 그래픽스 효과의 '범프 매핑'을 가리키는 용어였다거나)

2) oWoD 세계관의 룰북을 입수해서, 고유명사로서 음역해야 할지 어감을 살려 의역해야 할지, 그리고 어떤 번역어로 용어를 통일해야 하는지 확인해 봐야 하는 게임 용어들(e.g. 놋기The book of Nod, 안테딜루비안Antediluvian, 기지Wits, etc.)

3) vpk 파일로부터 추출하여 오버라이드 지점을 따내야 하는 부분들의 완전식별

4) 6940점 남아있는 컷신 자막 lip 파일들 ☜ 작업 중

5) 120점 남아있는 dlg 대화 파일들 ☜ 해결완료

 

이 중에서도 특히 lip과 dlg가 문제여서, 생각을 전환했다. 계속 손수 하다간 감당이 안 될 것이고, 그렇다고 맥락도 없이 번역기를 돌려버리면 번역내용이 망할 것이고, 번역팀을 꾸리는 건 지난한 일이거니와 분업을 하다 보면 어차피 번역품질은 내려간다. 때문에, 본업에서의 씁쓸한 방법론을 적용하기로 했다. 어쨌든 lip과 dlg만큼은 초벌번역 처리를 해놓아야 다른 분들도 같이 손을 대 주실 수 있게 되기 때문이다.

 

늘 그렇듯, 클라이언트에게 스토리보드를 아주 명확하게-사실상 보고 그걸 명세서 삼아 코드를 작성할 수 있게-제시해 달라고 하는 것은 불가능한 일이다. 기획을 어느 정도 해서 제시하더라도 그 피드백조차 명세서 형태로 받는 것은 불가능한 일이다. 클라이언트 입장에서 알맞은 서식의 형태로 세워진 것이나마 제공받는다면 다행이다. 그러나, 여하간 개발에 착수해서 진행한 뒤, 클라이언트에게 빠르게 보고하고 욕을 먹으며 수정을 거듭하는 것은 가능한 일이며 그때 클라이언트의 식견은 대단히 발전한다. 원래 백지에서 '어떻게 할까요' 하고 있으면 일이 안 되지만, '이것밖에 못하냐,' '의도가 그게 아니었다'고 시누이짓을 할 판을 만들어 준다면 갖은 의견이 다 튀어나와 주는 법이다 (물론 이렇게 하고 나서도 '엉망이다' '오류투성이다'까지의 피드백만 돌아오는 경우도 있겠지만 그건 나도 방향을 너무 잘못 잡았기에 시누이짓을 할 감도 못 오게 만든 잘못이 있으니 사죄해야 할 것...이라고 생각한다).

 

다른 게이머분들이 물론 클라이언트는 아니지만, 이런 상황에서는 맥락이 비슷해지는 부분이 있다. 한국어 번역패치가 없는 상태에서의 한국인 게이머들의 게임플레이는 영문이해 가능자의 전유물이거나, 내용의 일부를 놓치면서도 게임성 자체에 반해서 꾸역꾸역 게임을 플레이하는 소수 인원들의 놀이가 되어버리고, 거기에 무슨 숟가락을 얹는 것은 여의치 않으며 게임은 평론가 스트리머들의 리뷰조차 받지 못하고 묻힌다. 그러나 패치가 일단 되고 나면, 발번역이라도 일단 존재하므로 그때그때 지적을 받을 수 있는 것이다. 여기서 관건은 그 지적을 수렴할 채널을 만드는 일이다.

 

따라서, 현재 수행중인 앞부분과 일부 중요한 부분만 직접 번역을 마친 뒤, 초벌번역을 AI로 실행할 것이다. 단, 초대량의 텍스트를 그냥 처리할 수도 없거니와, 아무렇게나 쪼개어 기계번역을 돌리는 식으로 하게 되면 번역맥락이 없으므로 아예 못써먹을 물건이 될 것이다. 그래서는 곤란하므로, 작은 RAG를 아래의 방법론을 따라 구현한다:

 

1) 각 텍스트 문단 데이터를 소속파일 메타정보와 엮어 추출하고 고유 텍스트마다 고유번호를 sha3 해시스트링으로 매겨 관리하는 jsonl 파일을 만든다.

2) 번역 시 반드시 지켜야 할 인물 간 관계수칙(존비어, 말투, 특정 용어-e.g. 앙카라 석관Ankaran Sarcophagus, 프린스 라크루아Prince LaCroix 등의 강제 매핑)을 정의하는 관계 사전을 json으로 만들고, 이 관계 사전 json을 참조하는 규칙을 rules.md 마크다운 문서로 패키징한다.

3) OpenAI API를 호출하면서 위 rules.md의 정보를 프롬프트에 넣을 수 있도록 하면서 출력token 지출을 아낄 수 있는 batch 구조로 다시 jsonl 파일을 빌드하고, jsonl 파일의 용량 폭증으로 인해 Connection Lost 등의 상황이 발생하지 않도록 재분할하는 스니펫을 작성한다. 이미 위 1)에서 해시스트링으로 매겨 각 텍스트를 관리하고 있으므로, 위 2)에서 정의한 룰셋만 프롬프트로 넣어 준다면 분할호출을 하더라도 컨텍스트 윈도우를 유지하는 것에 준하는 효과를 볼 수 있다.

4) 위 작업을 자동화하는 스크립트를 만들어 돌린다.

상기 과업 각호의 단계를 수행하여, 1차 프로토타입 개발을 완수한 뒤 게임에 적용하여 보았다.

 

※ 패치는 영상 고정댓글의 링크로 배포되고 있음

*** GoG판, Unofficial Patch 기본적용 배포본으로서 Loader.exe를 통해 Unofficial Patch로 플레이하는 버전에서만 정상 작동하며, Unofficial Patch 미적용 버전 및 Steam 버전에서는 아직 호환되지 않는다. 기준은 2022년 패치 및 그 이후 패치 적용본이다. 향후 추가구입 여유가 생기면 Steam의 배포본은 따로 분석하여 파생 패치를 만들어 볼 예정이다.

 

내 랩탑 해상도(1920x1200)에 따라 약간씩 줄바꿈 규칙이 달라지면서 1~2글자씩의 깨짐이 간헐적으로 발생할 수 있는 부분을 발견해서, 인젝션 훅을 좀 더 디버깅해야 하겠다. 차라리 배경 하이라이트 도형 밖으로 글꼴이 조금 삐져나오더라도 띄어쓰기만 줄바꿈문자로 바꾸도록 조치하는 것을 고려 중이다. 그러나 게임 자체는 이제 꽤 재미있게 할 수 있을 것 같다.

cf) 패치를 개발하면서 절감한 것이지만...2000년대 초반의 환경에서 이런 게임을 개발해낸 것이 특히 감탄스럽다. 각각의 lip파일마다, 캐릭터의 동작과 표정을 세세하게 제어하여, 상호작용 과정에서 훗날의 폴아웃이나 엘더스크롤 시리즈에서조차 달성하지 못한 생동감을 주고 있는 것이다. 그 시절의 컴퓨팅 환경에서 이런 걸 다 정의해 넣을 수 있도록 개조하다 보니, 소스 엔진이 원래 갖추고 있었던 유니코드 출력 지원 능력을 빼버리고 확장성도 갖추기 어려운 구조로 개발하게 되었겠지만... 2004년 발매한 작품의 컷신이 도리어 2010년대 중후반 출시작보다 더 변화무쌍하고 생동감 있으며, 응시하다 보면 확실히 '사람이 아닌' 자들끼리의 아찔한 대화임을 절감하게 하는 것은 현재를 살아가는 우리가 지금 당장 개발에 임하더라도 과연 이 정도를 해낼 수 있을지에 대한 의혹과 반성을 자아내게 한다. 트로이카 게임즈와 팀 케인의 개발진에 경의를 표할 수밖에 없는 부분이다.

 

 

그리고 지금까지 작업한 cli 툴들을 백엔드로 묶고 GUI 프론트엔드를 PySide6으로 하는 원클릭 패처를 개발하였다.

'패치 적용' 버튼을 누르고, 열리는 다이얼로그 창에서 게임 설치 디렉토리만 선택하면 나머지는 모두 자동 진행하도록 구성하여 패치작업의 어려움을 줄이고자 함

 

이 패치는 VtMB 외의 타이틀에 대해서도 발굴하여 앞으로 다양한 한국어 번역 패치를 만들 때 뼈대가 되어 줄 것이다.

그리고 번역 및 검수 참여자분들과 기타 도와주신 분들을 기리는 정보는 패치 내 팝업윈도우로 내 미니서버의 WAS에서 브로드캐스팅해 주는 정보의 형태로 패치마다 갱신될 것이다.