RPG Maker(쯔꾸르) 게임을 번역하는 방법
RPG Maker는 존재하는 엔진 중 가장 번역하기 쉬운 엔진입니다 — 텍스트가 평범한 데이터 파일에 그대로 놓여 있습니다. 내 버전을 가려내고, 플레이 가능한 번역 빌드를 내보내고, 제어 코드를 온전히 지키는 방법입니다.
일본 인디 게임을 찾아 나설 때 가장 자주 마주치게 되는 엔진이 RPG Maker이고 — 국내에서는 흔히 쯔꾸르, 알만툴이라고 부르는 그것입니다 — 동시에 번역하기 가장 친절한 엔진이기도 합니다. 게임의 텍스트는 실행 파일에 컴파일되어 들어가 있지 않습니다. 게임 옆에 함께 배포되는 평범한 JSON이나 Ruby로 직렬화된 데이터 파일에 그대로 놓여 있습니다. RPG Maker 번역이 애초에 성립하는 이유가 그것이고, 아래 과정이 화면에 무엇이 떠 있는지 추측하는 오버레이가 아니라 실제로 플레이할 수 있는 빌드로 끝나는 이유도 그것입니다.
이 가이드는 여러분이 가진 것이 어느 RPG Maker인지 가려내는 법, 내보내기 흐름, 정확히 무엇이 번역되는지, 제어 코드가 기계 번역기를 어떻게 살아남는지, 그리고 어떤 줄이 잘못 돌아왔을 때 무엇을 해야 하는지를 다룹니다. RuneTranslate로 하든 하지 않든 쓸모 있도록 쓰였습니다.
내가 가진 건 어느 RPG Maker인가?
이 질문을 하는 사람 대부분은 자기가 쥔 것이 어느 버전인지 모르고, 그 답에 따라 할 수 있는 일이 달라집니다. 게임 폴더를 열고 이 목록에서 가장 먼저 들어맞는 것을 찾으세요:
www/data/*.json을 담은 `www/` 폴더 — RPG Maker MV입니다. 게임은 nw.js 앱이고, 실행 파일은 보통www/옆의Game.exe입니다.www/없이.json파일이 든 `data/` 폴더만 — RPG Maker MZ입니다. MZ는 모든 것을 한 단계 위로 올렸고, 둘을 구별하는 가장 빠른 방법이 바로 이것입니다..rxdata,.rvdata,.rvdata2를 담은 `Data/` — 각각 RPG Maker XP, VX, VX Ace입니다.Data/가 비어 보인다면 루트에서Game.rgssad,Game.rgss2a,Game.rgss3a를 확인하세요. 암호화된 아카이브 안에 든 같은 데이터입니다.- 루트의 `RPG_RT.exe`와
.lmt,.lmu파일 — RPG Maker 2000 또는 2003입니다. 세대가 통째로 다른 엔진입니다. - 옆에
www/도data/도 없는 수십~수백 MB짜리.exe— 데이터가 실행 파일 안에 패킹된 Enigma Virtual Box 빌드일 가능성이 높습니다. 아래를 보세요.
MV와 MZ는 사람들이 끊임없이 헷갈릴 만큼 닮았고, 편집을 시작하면 중요해지는 지점에서 갈립니다. MV 대 MZ 비교가 폴더 구조, 플러그인 형식, 메시지 창 차이를 짚습니다.
RPG Maker 2000과 2003의 게임 텍스트는 지원되지 않습니다. RuneTranslate는 세이브 편집기로 그 게임들의 .lsd 세이브 파일을 읽을 뿐, 그 외에는 아무것도 하지 않습니다. RPG_RT.exe 게임을 가지고 있고 스크립트를 번역하고 싶다면 맞는 도구는 EasyRPG이지 이것이 아닙니다. 한 시간을 들여 어렵게 알아내느니 지금 이 페이지를 떠나는 편이 낫습니다.
네 단계 흐름
- 새 프로젝트를 게임 폴더에 지정하세요.
Game.exe가 든 폴더를 고르면 됩니다. 엔진은 안에 무엇이 있느냐로 감지됩니다 — 드롭다운에서 MV나 MZ를 고르는 것이 아니며, 감지 결과가 예상과 다르다면 그것 자체를 정보로 읽을 가치가 있습니다. - 제공자와 대상 언어를 고르세요. 아홉 개 제공자를 쓸 수 있고, 그중 셋은 API 키도 계정도 전혀 필요 없습니다.
- 번역하세요. 러너가 유닛을 배치로 묶고, 실패한 것은 백오프를 두고 재시도하며, ETA가 붙은 진짜 진행률 표시줄을 보여줍니다. 실행 중에도 끝난 뒤에도 표의 어느 줄이든 편집할 수 있습니다.
- 플레이 가능한 빌드를 내보내세요 — 여러분이 고른 폴더로요. 거기 놓이는 것은 번역된 데이터 파일이 제자리에 들어간, 완전하고 실행 가능한 게임 복사본입니다.
원본 게임 폴더는 절대 수정되지 않습니다. 모든 쓰기는 여러분이 고른 출력 폴더로 갑니다. 즉 내보내기를 한 번 망쳐도 드는 비용은 디스크 공간뿐이니, 지우고 다시 내보내면 됩니다. 원본 일본어 빌드를 그대로 설치해 둔 채 한글패치가 적용된 빌드와 나란히 플레이할 수 있다는 뜻이기도 합니다.
RuneTranslate는 Windows 10과 11에서 실행되고, Linux와 Steam Deck에서는 Wine이나 Proton으로 실행됩니다. 첫 실행 시 무료 Patreon 로그인이 필요합니다. 무료 등급은 모든 엔진과 모든 제공자를 열어 줍니다 — 기능을 유료 장벽 뒤에 가두는 대신, 처리량을 조절하고 프로젝트를 한 번에 하나만 보관합니다.
실제로 무엇이 번역되나
MV와 MZ에서는 추출기가 모든 맵 파일과 모든 이벤트 명령 목록을 훑으면서, 플레이어에게 보이는 텍스트를 만들어 내는 명령을 끄집어냅니다:
- `401` 문장 표시 — 대사 줄. 어느 RPG Maker 게임에서든 이것이 대부분을 차지합니다.
- `405` 스크롤 문장 표시 — 인트로, 크레딧, 편지, 흘러가는 설명 문구.
- `102` 선택지 표시 — 선택지 창의 항목들.
When [choice]분기 라벨도 같은 배열에서 그려지므로, 선택지를 번역하면 양쪽이 함께 번역됩니다. - `320` / `324` / `325` — 액터 이름·별명·프로필 변경. 이야기 중반의 정체 공개나 변신에 쓰입니다.
- 데이터베이스 —
Actors.json(이름, 별명, 프로필),Classes.json,Skills.json(이름, 설명, 그리고message1/message2전투 대사),Items.json,Weapons.json,Armors.json,Enemies.json,States.json. - `System.json` — 게임 타이틀, 화폐 단위, 그리고 용어 테이블 전체: 엔진이 그리는 모든 메뉴 라벨, 명령 이름, 기본 능력치 문자열.
- `MapInfos.json`의 맵 이름과
CommonEvents.json— 대사를 공용 처리기로 흘려보내는 게임에서는 커먼 이벤트가 놀랄 만큼 많은 스크립트를 품고 있습니다. plugins.js의 플러그인 파라미터와 MZ 플러그인 명령 인자(명령 코드357). 요즘 MV/MZ 게임 상당수가 메뉴 텍스트를 여기에 둡니다.
이벤트 주석(108과 그 연속 줄인 408)은 엔진이 플레이어에게 보여주지 않는 개발자 메모라 기본적으로 제외됩니다. 삭제되는 것은 아닙니다 — 체크해서 넣을 수 있는 선택 행으로 나타나는데, 일부 말풍선·팝업 메시지 플러그인은 그것을 실제로 그리기 때문입니다. 분류기가 코드 식별자나 파일 경로로 읽는 것에도 같은 처리가 적용됩니다: 제외되지만, 보이고, 되돌릴 수 있습니다.
제어 코드, 그리고 그것이 번역을 깨뜨리는 이유
RPG Maker 대사는 평문이 아닙니다. 엔진이 그리는 시점에 펼쳐 내는 인라인 이스케이프 코드를 품고 있습니다:
\C[1]— 텍스트 색을 팔레트 1번으로 바꿉니다.\N[2]— 액터 2번의 이름으로 치환합니다.\V[3]— 변수 3번의 값으로 치환합니다.\G— 화폐 단위.\I[123]— 아이콘 123번을 인라인으로 그립니다.\.\|\!\{\}— 살짝 멈춤, 1초 멈춤, 입력 대기, 글꼴 키우기, 글꼴 줄이기.
이것들을 날것 그대로 기계 번역기에 넘기면 망가진 채로 돌아옵니다. Google Translate는 순서를 뒤바꿉니다. 작은 로컬 모델은 괄호를 한쪽 빠뜨리거나, 글자를 소문자로 바꾸거나, ASCII 괄호를 전각 괄호로 갈아 끼웁니다. LLM은 이따금 \C[1]을 오타로 판단하고 친절하게 지워 버립니다. 게임에서의 결과는 백슬래시가 그대로 찍히거나, 중간에 색을 잃거나, 캐릭터 이름이 있어야 할 자리가 비어 있는 텍스트 상자입니다.
RuneTranslate는 제공자가 문자열을 보기 전에 모든 코드를 번호 매긴 플레이스홀더 — [[T0]], [[T1]] — 로 가린 뒤, 나중에 매핑에서 복원합니다. 복원은 의도적으로 너그럽습니다: 한쪽 괄호가 빠진 채, 안에 공백이 더 붙은 채, 소문자로, 또는 전각 괄호로 돌아온 플레이스홀더도 받아들입니다. 실제로 그 네 가지가 모두 일어나기 때문입니다. 코드가 통째로 사라진 경우에는 조용히 내보내는 대신 해당 유닛에 표시를 남깁니다.
덜 뻔한 두 경우도 같은 장치로 덮입니다. RPG Maker는 printf 형태의 치환도 씁니다 — Terms와 스킬 전투 메시지의 %1, %2가 그것으로, %1の攻撃!에서 %1이 액터 이름이 되는 식입니다 — 그리고 그것들도 가려집니다. 약한 제공자는 그 자리에 괄호 쓰레기를 지어내기 때문입니다. 또 많은 게임이 [名前]이나 [呼名] 같은 맨 대괄호 토큰을 런타임에 플레이어 이름으로 바꿔치기하는 이름 치환 플러그인을 함께 배포하는데, 그것들도 가려집니다 — 평범한 대괄호 문장은 건드리지 않을 만큼 좁게요.
\FFF[20]이나 \FH[ON]처럼 플러그인이 정의한 여러 글자 코드도 같은 패턴에 걸리므로, 플러그인마다 따로 설정하지 않아도 보호됩니다.
46자 줄바꿈
일본어는 글자 하나에 담기는 뜻이 영어보다 훨씬 많습니다. 일본어에서는 메시지 창에 넉넉히 들어가던 줄이 번역되고 나면 오른쪽 밖으로 흘러나가는데, RPG Maker는 대신 줄을 바꿔 주지 않습니다 — 그냥 창 너머로 그려 버리고, 넘친 부분은 보이지 않습니다. 플레이어가 문장 절반이 없다고 말해 주기 전까지는 눈치채지 못합니다.
내보낼 때 401과 405 명령의 대사는 한 줄 46자로 줄바꿈됩니다. 기본 글꼴 크기에서 기본 메시지 창이 담아내는 분량이 대략 그 정도입니다. 줄은 단어 경계에서 나뉘고, 원본에 이미 있던 개행은 보존되므로 작가 자신의 페이지 나눔과 의도적인 줄 나눔은 살아남습니다. 커스텀 메시지 시스템이나 더 작은 글꼴을 쓰는 게임은 다른 숫자를 원할 수 있습니다. 더 넓은 창에 텍스트를 그리는 게임이라면 필요보다 일찍 줄이 바뀔 뿐이고, 그것은 망가진 것이 아니라 보기의 문제입니다.
암호화된 이미지와 아카이브
MV와 MZ에는 이미지 이름을 .rpgmvp나 .png_로 바꾸고 헤더에 XOR을 씌우는 에셋 암호화 옵션이 있습니다. RuneTranslate는 표준 방식을 가정하지 않습니다 — PNG 시그니처를 이미 아는 평문으로, IHDR CRC32를 검증 수단으로 삼아, 파일 자체의 바이트에서 헤더 길이와 XOR 구간 길이와 키를 복구합니다. 이것이 중요한 이유는 다른 파라미터(32바이트 헤더, 32바이트 구간, 거울처럼 뒤집은 키)를 쓰는 암호화 플러그인이 존재하고, System.json에서 키가 아예 빠진 게임도 많기 때문입니다. RPG Maker 자체 방식은 첫 번째 반복에서 검증을 통과하므로 흔한 경우에는 느려지는 것이 없고, 되쓰는 것은 같은 방식으로 다시 암호화되므로 게임 자체의 복호화기가 그대로 불러옵니다.
XP, VX, VX Ace에서는 .rgssad / .rgss2a / .rgss3a 아카이브를 직접 읽고, 그 안의 Ruby Marshal 데이터를 TypeScript로 파싱합니다 — Ruby 설치도, 외부 언패커도 필요 없습니다. 이쪽 지원은 최선의 노력입니다: XP와 VX 게임은 텍스트를 태그된 UTF-8이 아니라 Shift-JIS 바이트 문자열로 저장하므로, MZ보다 인코딩 예외 상황이 생기기 쉽습니다.
아트워크에 그려 넣은 텍스트 — 타이틀 화면, 메뉴 버튼, CG 속 간판 — 는 어떤 데이터 파일에도 없고 어떤 추출기도 닿을 수 없습니다. 그것이 이미지 스튜디오가 있는 이유입니다: 텍스트 영역을 감지하고, 판을 지우고, 대체 문구를 조판한 뒤, 암호화까지 포함해 게임 자체의 이미지 형식으로 다시 구워 넣습니다.
Enigma Virtual Box로 패킹된 게임
배포되는 RPG Maker 게임 중 꽤 많은 수는 눈에 보이는 www/나 data/ 폴더가 아예 없습니다. 가상 파일 시스템 전체가 Enigma Virtual Box로 실행 파일 안에 패킹되었기 때문입니다. 실마리는 exe 안의 EVB\0 표식과, 수상하게 텅 비어 보이는 게임 폴더입니다.
이런 게임도 감지되고 처리됩니다. 패킹된 파일 시스템을 프로젝트별 작업 공간으로 풀어내고, 데이터를 평소처럼 추출·번역한 뒤, 내보낼 때 가상 파일 시스템 전체를 실행 가능한 폴더로 써냅니다 — 복원된 안쪽 실행 파일, 그 DLL들, www/까지, 번역된 데이터가 패치된 채로요. 여러분이 실행하는 것은 추출된 안쪽 실행 파일이고, 그 시점에는 낱개 데이터 파일을 읽는 평범한 언팩된 게임입니다.
그렇게 할 수밖에 없습니다. 이전 방식은 번역된 www/를 패킹된 실행 파일 옆에 떨궈 두는 것이었는데, 조용히 아무 일도 하지 않았습니다: 실행 중인 래퍼는 www/를 자기 안에 내장된 가상 파일 시스템에서 해결하고 디스크 위의 파일은 무시합니다. 다른 도구로 손수 이 작업을 하고 있다면 바로 그것이 함정입니다 — 번역이 적용된 것처럼 보이는데 게임은 그대로 원본 텍스트를 불러옵니다.
어느 제공자를 고를까
아홉 개 제공자가 지원되고, 그중 셋은 API 키도, 어디에 계정을 만들 필요도 없습니다: Google, 무료 DeepL 엔드포인트, 그리고 Classic이나 Next-gen 모델을 고를 수 있는 DeepL입니다. 누구에게도 돈을 내지 않고 아무 데도 가입하지 않은 채 RPG Maker 게임 하나를 통째로 번역할 수 있습니다. 유료 선택지는 DeepL API, OpenAI, Anthropic Claude, DeepSeek, 모든 OpenAI 호환 엔드포인트, 그리고 아무것도 여러분의 PC를 떠나지 않기를 바란다면 Ollama나 LM Studio를 통한 로컬 모델입니다.
RPG Maker에 한정한 짧은 결론: 무료 스크레이퍼는 메뉴, 아이템 이름, 짧은 줄에 충분하고, 대부분은 여기서 시작하는 것이 맞습니다. 약한 곳은 의성어·의태어입니다 — 제공자가 원본을 그대로 돌려주면 해당 유닛은 일본어를 슬쩍 통과시키는 대신 메모와 함께 실패로 표시됩니다. 긴 대사, 어조, 화자의 말투가 중요한 곳에서는 LLM이 눈에 띄게 낫습니다. 실제 득실은 제공자 비교에 있고, 완성된 번역 위에 2차 패스를 돌려 다듬는 방법은 AI 리파이너가 다룹니다.
이름을 일관되게 유지하기
기계 번역된 RPG Maker 게임에 대해 가장 흔히 나오는 불만은 주인공이 네 가지 다른 이름으로 불린다는 것입니다. 용어집이 그것을 고칩니다 — 실행 전에 모든 캐릭터, 지명, 아이템, 스킬의 표기를 못 박아 두면 모든 배치가 그것을 씁니다. 용어집 가이드가 만드는 과정을 안내합니다. 번역 메모리도 같은 방향으로 돕습니다: 동일한 원본 문자열은 프로젝트 전체에서 동일한 번역을 받는데, 같은 아이템 설명이 상점과 메뉴와 상자 이벤트에 함께 나타나는 엔진에서는 이것이 중요합니다.
RPG Maker 특유의 함정 하나: 어떤 플러그인은 화자의 이름 문자열을 정확히 일치로 비교해 동작합니다 — MZ의 TRP Skit 계열이 잘 알려진 사례입니다. Actors.json의 이름을 번역해 놓고 플러그인 데이터에는 그대로 두면 대조가 조용히 실패해서, 초상화나 스킷이 아예 발동하지 않습니다. RuneTranslate는 내보낼 때 양쪽을 맞춰 줍니다. 손으로 편집한다면, RPG Maker에서 이름은 표시 텍스트이면서 동시에 조회 키일 수 있다는 점을 기억하세요.
무언가 잘못됐을 때
어떤 줄이 여전히 일본어입니다
보통 세 가지 원인입니다. 애초에 추출되지 않았을 수 있습니다 — 추출기가 훑지 않는 곳, 이를테면 커스텀 플러그인 자체의 데이터 파일이나 이미지에 구워진 텍스트에 있는 경우입니다. 추출은 되었지만 제외되었을 수 있습니다 — 분류기가 식별자로 읽은 것이니, 선택 행으로 찾아 체크하세요. 아니면 제공자가 원본을 그대로 돌려준 경우인데, 실패한 유닛으로 보이며 다른 제공자로 다시 돌릴 수 있습니다. 앱을 업데이트하기 전에 게임을 번역했다면 편집기의 ⋯ 메뉴에서 원본 다시 스캔을 쓰세요 — 다시 스캔하면 유닛이 추가될 뿐, 기존 번역이 삭제되는 일은 없습니다.
텍스트가 메시지 창을 넘칩니다
기본 줄바꿈은 기본 창을 겨냥합니다. 커스텀 메시지 시스템, 더 큰 글꼴, 또는 창의 절반을 차지하는 초상화가 있는 게임은 더 짧은 줄이 필요합니다. 문제가 되는 유닛을 직접 편집해 여러분의 줄바꿈을 넣으세요 — 손으로 넣은 줄바꿈은 내보내기까지 보존됩니다. 번역이 그저 너무 장황할 때의 해법도 이것입니다: 줄바꿈과 싸우지 말고 더 짧게 다시 쓰세요.
내보낸 뒤 게임이 실행되지 않습니다
거의 언제나 나쁜 텍스트가 아니라 깨진 데이터 파일이 원인입니다. 원본이 아니라 출력 폴더의 실행 파일을 실행했는지 확인하세요. EVB 빌드라면 추출된 안쪽 실행 파일을 실행하고 있는지 확인하세요. 특정 이벤트에서 충돌한다면 살아남지 못한 제어 코드가 유력한 용의자입니다 — 해당 유닛을 열어 원본과 코드를 대조하세요. 언제든 비교할 정상 기준이 남아 있도록 원본 게임 폴더는 손대지 않은 채로 두세요.
번역되면 안 되는 플러그인 문자열이 있습니다
플러그인 파라미터는 표시 텍스트와 스위치 이름, 파일 경로, 키 설정, 모드 플래그를 한 덩어리에 섞어 둡니다. 코드 식별자나 경로로 읽히는 것은 자동으로 제외되지만, 일본어 단어를 내부 키로 쓰는 플러그인은 빠져나갑니다. 그런 유닛을 제외로 표시해 두면 내보낼 때 원본 언어로 남습니다. 플러그인 파라미터가 이름 패턴을 공유한다면 정규식 필터로 한꺼번에 처리할 수 있습니다.
정직한 한계
- RPG Maker 2000 / 2003의 게임 텍스트는 범위 밖입니다. 세이브 편집기를 통한 세이브 파일만 됩니다. 스크립트에는 EasyRPG를 쓰세요.
- XP, VX, VX Ace는 최선의 노력입니다. 아카이브 리더와 Ruby Marshal 파서는 순수 TypeScript이고 작동하지만, 오래된 Shift-JIS 문자열 처리는 MV/MZ보다 거친 표면입니다.
- 커스텀 플러그인의 자바스크립트에 컴파일된 텍스트는 데이터처럼 보일 때만 닿을 수 있습니다. 자체 로직 안에 문자열을 하드코딩한 플러그인은 손으로 편집해야 합니다.
- 네이티브로 보호된 MZ 빌드 — 데이터가 자바스크립트 계층 아래에서 복호화되는 경우 — 는 암호화를 되짚는 대신 런타임 캡처와 오버레이 경로로 처리됩니다. 작동합니다. 최선의 노력으로 다루고, 긴 실행에 들어가기 전에 내보내기를 검증하세요.
- 여기 있는 어떤 것도 빌드를 직접 플레이해 보는 것을 대신하지 못합니다. 추출 개수와 초록색 진행률 표시줄은 증거가 아닙니다. 내보낸 게임을 실행해 처음 10분을 읽어 보세요.
알아 두면 좋은 인접한 것 두 가지
치트 모드는 RPG Maker 게임 자체의 스위치와 변수와 아이템을 읽어 여러분이 그것을 뒤집을 수 있게 해 줍니다. 번역을 확인해야 하는 후반부 이벤트에 도달하는 가장 빠른 방법이고, 대부분은 20시간을 다시 플레이하지 않고 이 방법으로 내보내기를 검증합니다. 세이브 편집기는 MV/MZ, XP/VX/VX Ace, 그리고 2000/2003의 .lsd 세이브를 직접 열어 주므로, 막힌 플레이나 사라진 열쇠 아이템 때문에 실행이 끝나 버리지 않습니다.
먼저 큰 그림을 보고 싶다면 엔진 목록이 지원되는 열일곱 개 형식을 모두 다루고, RPG Maker 엔진 페이지에 형식 세부가 있으며, 일반 안내는 이 가이드의 엔진 비종속 버전입니다. 준비가 되면 다운로드 페이지에 설치 프로그램이 있습니다.
RuneTranslate를 써볼 준비가 되셨나요?
무료 등급에서 모든 엔진과 모든 번역 제공자가 열립니다. Supporter($3/mo)로 최고 속도가 열립니다.
Windows용 다운로드
