RuneTranslate가 이제 NScripter / ONScripter 비주얼 노벨을 번역합니다
RuneTranslate가 이제 NScripter와 ONScripter 비주얼 노벨을 영어와 30개 이상 언어로 번역합니다 — XOR-0x84로 난독화된 nscript.dat를 디코딩하고, Shift-JIS / CP932 텍스트와 라틴 문자로 시작하는 줄의 파서 함정을 처리하며, 타이틀 화면·메뉴·버튼에 새겨진 일본어까지 번역합니다. 게임 폴더를 가리키면 자동 감지, 번역, 바로 실행 가능한 사본으로 내보내기. 새로 추가됨 — 로드되지 않는 게임이 있으면 알려주세요.
RuneTranslate가 이제 일본 비주얼 노벨에서 가장 오래된 방언 중 하나를 구사합니다: NScripter와 그 오픈소스 쌍둥이인 ONScripter입니다. 알쏭달쏭한 .dat 파일과 Shift-JIS 스크립트가 든 폴더 형태로 배포되는 고전 도진 VN을 한 번쯤 번역하고 싶었다면 — 이 엔진 계열은 역사적으로 손으로 뜯어내기가 가장 고통스러웠고, 기계 번역 도구가 대개 건너뛰던 대상입니다. RuneTranslate는 이제 이를 감지하고, 스크립트 텍스트를 읽으며, 타이틀 화면과 메뉴 버튼에 그려진 일본어까지 번역합니다.
이것은 새로 추가된 엔진이므로 무엇보다 먼저: RuneTranslate를 NScripter / ONScripter 게임에 가리켰는데 로드되지 않거나 감지되지 않으면 꼭 알려주세요. 이에 대한 자세한 내용은 끝에 있습니다.
NScripter와 ONScripter가 실제로 무엇인지
NScripter는 다카하시 나오키(Naoki Takahashi)가 작성한 Windows용 비주얼 노벨 스크립트 엔진으로, 대략 1999년부터 2018년까지 개발되었습니다(마지막 포인트 릴리스인 3.10.102는 2018년 2월 자로, 다만 의미 있는 기능 작업은 2000년대 초 이후 급격히 둔화되었습니다). 오픈소스였던 적은 없지만 라이선스는 로열티 없는 개인 및 상업적 사용을 허용했고, 그 점이 — 내장 아카이브 패커와 강력하면서도 유명하게 저수준인 스크립트 언어와 맞물려 — 전성기 일본에서 가장 널리 쓰인 VN 엔진 중 하나로 만들었습니다. Nekonekosoft 같은 상업 스튜디오는 거의 전적으로 이에 의존했고, 도진 씬은 이를 사랑했습니다.
ONScripter는 별개의 독립 프로젝트입니다. NScripter 런타임을 오픈소스(GPL)로 재구현한 것으로, 2002년에 Ogapee로 알려진 프로그래머가 시작했습니다. SDL 기반이며 NScripter 게임과 드롭인 호환을 목표로 하지만, NScripter가 결코 가지 못한 곳 — Linux, macOS, BSD, Android 등 — 에서 실행됩니다. 개방적이고 수정 가능하기 때문에 영어권 현지화 커뮤니티는 번역된 NScripter 게임을 배포하기 위한 사실상의 엔진으로 이를 채택했고, 일련의 포크가 서구권 언어 지원을 더했습니다: Chendo의 2004년 1바이트 문자 패치, Haeleth의 비례 Unicode 폰트용 ONScripter-EN(ONS-EN)과 Ponscripter*, Uncle Mion의 이후 유지보수, 그리고 현대 빌드를 위한 insani의 재가동 브랜치입니다.
그러니 짧게 말하면: NScripter는 게임들이 제작된 원래의 폐쇄형 Windows 엔진이고, ONScripter(그리고 ONS-EN / Ponscripter)는 팬 번역가들이 실제로 번역 빌드를 실행하는 개방형 크로스 플랫폼 런타임입니다. RuneTranslate는 게임의 스크립트와 에셋에서 작업하므로 어느 진영의 타이틀이든 다룹니다.
이 게임들이 왜 그토록 번역하기 어려웠는지
Ren'Py나 Kirikiri 같은 현대 엔진과 비교하면, NScripter / ONScripter는 엔진 시대의 별난 함정으로 가득한 지뢰밭입니다. 그중에서도 특히 네 가지가 수작업 번역가와 순진한 기계 번역 도구 모두에게 벽이 되어 왔습니다:
- Shift-JIS / CP932 인코딩. 옛 스크립트와 데이터 파일은 Shift-JIS(마이크로소프트 변형인 CP932), 즉 오래된 일본어 더블바이트 인코딩으로 되어 있습니다. 잘못 디코딩하면 모지바케가 나오고, 부주의하게 재인코딩하면 일부 오래된 런타임이 메모리를 손상시키고 크래시합니다. 번역기는 CP932를 올바르게 감지하고 왕복 변환해야 합니다 — 현대 네이티브 스크립트는 UTF-8일 수 있지만 예전 카탈로그는 CP932입니다.
- XOR-0x84로 난독화된 `nscript.dat`. 컴파일된 스크립트는 보통
nscript.dat(Ponscripter에서는pscript.dat)에 들어 있으며, 모든 바이트가 상수 바이트0x84에 대해 XOR 처리되어 있습니다. 이는 암호화가 아닙니다 — 문서는 이것이 아무 보안도 제공하지 않으며 단지 우발적인 스포일러를 막는 장치일 뿐이라고 명시합니다 — 하지만 그렇다고 텍스트 편집기에서 그냥 열 수도 없습니다. XOR를 되돌리고 안의 Shift-JIS 텍스트를 편집한 뒤 저장할 때 다시 XOR를 적용해야 합니다. (게임은 대안으로 평문0.txt/.u스크립트를 배포하거나.nsa/.sar아카이브 안에 스크립트를 넣기도 합니다.) - 이미지 아트에 새겨진 텍스트. 타이틀 화면, 메뉴, 버튼은 흔히 미리 렌더링된 비트맵입니다 — NScripter는 일부 아트를 BMP로 요구하기까지 합니다 — 그래서 그 위의 일본어는 문자열이 아니라 픽셀입니다. 문자열 추출기로는 손댈 수 없습니다.
- 미묘한 것: 라틴 문자로 시작하는 줄이 명령으로 재해석됩니다. NScripter의 파서는 모든 줄을 명령 모드로 시작합니다. 역사적으로 이는 안전했는데, 엔진이 2바이트 일본어만 받아들였으므로 표시되는 줄은 모두 명백히 텍스트였기 때문입니다. 1바이트 영어를 넣는 순간, 라틴 문자로 시작하는 줄은 스크립트 명령과 똑같아 보이고 엔진이 이를 실행하려 합니다 — 게임을 망가뜨리죠. 커뮤니티의 해결책은 예약된 텍스트 마커(옛 ONScripter의 백틱 `
`, Ponscripter는 이후^`로 옮겨감)로, 줄의 나머지를 텍스트 모드로 강제합니다. 일본어를 영어로 순진하게 찾아 바꾸면 엔진이 명령으로 잘못 읽는 줄이 생깁니다.
바로 그 마지막 함정 때문에 초기 팬 프로젝트(Gin'iro, Mizuiro)가 2바이트 라틴 문자를 동원했고 — 순정 NScripter는 1바이트 입력을 아예 받지 않았습니다 — 엔진을 이해하지 못하는 범용 번역기가 스크립트를 그냥 망가뜨리는 것입니다.
RuneTranslate가 지금 하는 일
RuneTranslate는 NScripter / ONScripter를 일급 엔진으로 다루며 문제의 두 절반을 모두 처리합니다:
- 스크립트 텍스트. 게임의 스크립트 — 별도의 평문 파일(
0.txt등)이나 XOR0x84로 난독화된nscript.dat— 를 읽어 Shift-JIS / CP932 대사를 디코딩하고, 번역 가능한 모든 줄을 에디터에 나열하며, 내보낼 때 엔진이 기대하는 형태로 스크립트를 다시 쓰되 원본.dat가 사용했다면 XOR0x84난독화를 다시 적용합니다. 또한 1바이트 텍스트 마커를 자동으로 적용하여 번역한 영어가 명령으로 잘못 읽히지 않게 합니다. (게임 루트에 별도 사본 없이.nsa/.sar아카이브 안에만 들어 있는 스크립트는 아직 읽지 못합니다 — 아래 제한 사항 참조.) - 새겨진 이미지 텍스트. 타이틀 화면, 메뉴, 버튼의 일본어 — 문자열이 아니라 픽셀 — 는 RuneTranslate의 이미지 텍스트 번역이 처리합니다: 단어를 상자로 지정하고, 인식하고, 자신의 제공자로 번역한 뒤, 결과를 다시 구워 넣어 게임이 번역된 아트를 대신 로드하게 합니다.
일본어 → 영어가 최적의 지점입니다 — 이 엔진의 팬 번역 역사 전체가 바로 그것에 관한 것이었고, 옛 Shift-JIS 스크립트에서는 비라틴 대상 언어가 엔진의 폰트가 렌더링할 수 있는 범위로 제한됩니다 — 하지만 30개 이상 언어 중 무엇이든 대상으로 삼을 수 있습니다.
필요한 것
- Windows용 RuneTranslate — 무료이며 모든 엔진과 제공자가 해제되어 있습니다.
- NScripter 또는 ONScripter 게임 폴더. 게임의
.exe(또는 ONScripter 바이너리)와 스크립트·에셋이 든 디렉터리로, 보통nscript.dat, 별도의0.txt, 그리고 하나 이상의.nsa/.sar아카이브가 있습니다. - 대상 언어 — 영어, 스페인어, 프랑스어, 독일어, 포르투갈어, 러시아어, 중국어, 이탈리아어, 터키어, 베트남어, 그리고 20개 이상 더.
- 번역 제공자 하나. 무료 Google Translate는 바로 작동하고, DeepL에는 무료 등급이 있으며, OpenAI, Anthropic, 로컬 모델(Ollama / LM Studio), 그리고 OpenAI 호환 API는 각자 키를 준비하면 됩니다. 이 게임들은 대사가 많고 톤에 민감하므로 보통 LLM(OpenAI / Anthropic)이나 DeepL이 가장 잘 읽힙니다.
1단계: 게임 폴더 열기
RuneTranslate를 실행하고 새 프로젝트를 클릭한 뒤 NScripter / ONScripter 게임 디렉터리를 가리키세요. 엔진 감지가 자동으로 실행됩니다 — nscript.dat, 별도의 0.txt 스크립트, 또는 엔진의 .nsa 아카이브를 보면 프로젝트를 NScripter / ONScripter로 인식합니다. 원본 게임 폴더는 절대 수정되지 않습니다.
2단계: 스크립트를 읽는 방식
RuneTranslate는 게임이 루트에 별도로 배포하는 스크립트를 읽어 대신 디코딩해 줍니다:
- 난독화된 `nscript.dat` —
0x84에 대해 XOR를 되돌려 Shift-JIS로 읽으므로 별도의nsdec단계를 실행할 일이 없습니다. - 별도의 평문 스크립트(
0.txt등) — 직접 읽습니다. - 아카이브된 이미지 — 아래의 이미지 텍스트 단계를 위해 게임의
.nsa/.sar아카이브에서 가져옵니다. (스크립트 자체는 위의 별도 루트 파일에서 읽으며, 아카이브 안에만 담긴 스크립트는 아직 읽지 못합니다.)
대사와 표시 텍스트는 파일별로 묶여 에디터에 나열됩니다. 엔진 마크업과 명령 토큰은 무엇이든 제공자에 도달하기 전에 숫자 자리표시자 뒤로 가려졌다가 나갈 때 복원됩니다 — 그리고 1바이트 텍스트 마커가 필요한 곳에 적용되어 엔진이 번역한 영어 줄을 명령으로 착각하지 않습니다.
3단계: 번역
제공자를 고르고 실행하세요. 비주얼 노벨에는 캐릭터 목소리와 톤에는 LLM(OpenAI / Anthropic)이 가장 좋고, 내레이션에는 DeepL이 빠르고 깔끔하며, 짧은 메뉴 문자열에는 무료 Google Translate로 충분합니다. 이름이 게임 전체에서 동일하게 표기되도록 등장인물과 반복 용어를 미리 용어집에 정리하세요 — 용어집 101을 참고하세요. 끝나면 AI 리파이너로 선택적 패스를 돌려 각 줄을 문맥 속에서 다시 읽고, 기계 번역이 남기기 쉬운 딱딱하고 직역적인 표현을 다듬습니다.
4단계: 이미지 속 텍스트 번역
NScripter UI의 상당 부분이 미리 렌더링된 아트이므로, 이 단계는 대부분의 엔진보다 여기서 더 중요합니다. 프로젝트에서 타이틀이나 메뉴 이미지를 열고, 각 일본어 조각 둘레로 상자를 끌어 지정하고, 인식하고, 대사에 쓰는 것과 같은 제공자로 번역하면, 내보낼 때 RuneTranslate가 번역을 이미지에 다시 구워 넣고 이를 내보낸 사본에 별도로 기록하여 엔진이 아카이브된 원본 위로 번역된 아트를 로드합니다. (원본 게임 폴더는 그대로 유지됩니다. SPB로 압축된 아트와 몇몇 이색적인 이미지 변형은 아직 다듬는 중입니다 — 이상해 보이는 것은 무엇이든 알려주세요.) 전체 안내: 이미지 텍스트 번역.
5단계: 바로 실행 가능한 사본 내보내기
내보내기를 클릭하세요. RuneTranslate는 게임의 번역된 사본을 씁니다 — 스크립트는 Shift-JIS / CP932로 다시 인코딩되고 원본 .dat가 사용했다면 XOR 0x84로 다시 난독화되어, 엔진이 어떤 아카이브 사본보다 우선해 로드하는 별도 스크립트로 기록되며, 번역된 이미지도 그 옆에 별도로 기록됩니다. 게임을 실행하면 원래의 NScripter 런타임에서 실행하든 ONScripter / ONScripter-EN에서 실행하든 대상 언어로 재생됩니다.
알려진 제한 사항
- XOR-0x84 난독화는 처리되지만, 표준 난독화가 아니라 진짜 커스텀 암호화로 보호된 게임은 열리지 않을 수 있습니다.
- 게임 루트에 별도의
nscript.dat/0.txt없이.nsa/.sar아카이브 안에만 담긴 스크립트는 아직 추출되지 않습니다 — 대부분의 게임은 스크립트를 별도로 배포하지만 일부는 그렇지 않습니다. - 이미지 텍스트 번역은 메뉴·타이틀·버튼에 그려진 일본어에 닿지만, SPB로 압축된 아트와 강하게 양식화된 로고 아트는 여전히 수동 손질이 필요할 수 있습니다.
- 정확한 엔진은 릴리스마다 다를 수 있습니다 — NScripter와 흔히 연관되는 일부 타이틀(예: When They Cry 계열의 일부)은 NScripter로 제작되어 흔히 ONScripter로 실행되지만, 특정 Steam / 콘솔 재발매판은 때때로 다시 설계되었습니다. 항상 자신의 사본에서 확인하세요.
완전히 새로운 기능입니다 — 무엇이 깨지는지 알려주세요
이 엔진은 갓 추가된 것이며 실전 검증을 거친 것이 아닙니다. NScripter / ONScripter에는 수십 년에 걸친 변형, 포크, 스튜디오별 별난 점이 있고, 우리가 그 전부를 본 것은 아닙니다. 그러니 RuneTranslate를 NScripter 또는 ONScripter 게임에 가리켰는데 감지되지 않거나, 로드되지 않거나, 런타임이 열지 못하는 것을 내보낸다면 꼭 알려주세요 — 게임 이름과 패키징 방식(별도의 0.txt, nscript.dat, .nsa 아카이브)이야말로 우리가 가장 빨리 견고하게 만드는 데 도움이 됩니다.
RuneTranslate 다운로드 후, 오래전부터 읽고 싶었던 그 고전 VN에 가리키고 시도해 보세요. 더 현대적인 VN 엔진을 보려면 다음으로 Ren'Py 안내를 읽어보세요.
RuneTranslate를 써볼 준비가 되셨나요?
무료 등급에서 모든 엔진과 모든 번역 제공자가 열립니다. Supporter($3/mo)로 최고 속도가 열립니다.
Windows용 다운로드