본문 바로가기

Visual Novel Project/Support&Service

키리키리(Kirikiri) 엔진 한글화 방법(1) - 개요부터 언팩까지

키리키리를 사용하는 미연시 번역을 시도하시는 여러분을 환영합니다.

대단한 노하우도 아닙니다만, 간단하게 따라해 보실 수 있는 노하우를 몇 가지 알려드리고자 합니다.

 

전문적인 지식은 아니더라도 다소의 컴퓨터 지식이 필요할 수 있습니다!

- 어려울 수 있는 용어는 맨 마지막에 '더보기'로 정리해 두었습니다.

 

1. 엔진의 개요

키리키리는 오픈소스 스크립트 엔진으로, 제작자의 홈페이지 및 Github에서 자유롭게 다운로드받아 사용할 수 있습니다.

오픈소스라는 특성상 로열티가 들지 않고 개량이 용이하기 때문에, 주로 중소 제작사나 인디게임에서 많이 사용되고 있습니다.

(대형 제작사가 안 쓴다는 건 아닙니다만, 보통 대형 제작사는 자체 프로그래밍 팀을 두고 있기 때문에 손에 익은 구형 엔진을 많이 씁니다. Buriko General Interpreter, Majiro Script Engine 등)

 

 

 

확장자를 확인하면, xp3 파일들이 보입니다.

 

 

이 게임이 키리키리를 사용하는가, 그렇지 않는가는 소스 파일의 확장자로 알 수 있습니다.

게임이 설치된 디렉토리를 들어가니 .xp3 파일이 보인다! 하면 바로 그게 키리키리를 사용한 게임입니다.

 

하지만 여기서 끝이 아닙니다.

 

키리키리 엔진은 구버전인 2와 최신 버전인 Z로 나뉩니다.

이 두 엔진이 사실상의 현역으로 뛰고 있다 보시면 됩니다.

구분법은 여러 가지가 있지만, 가장 간편한 것은 작업 관리자를 통한 방법입니다.

 

 

 

Kirikiri 2를 사용하는 게임의 경우
Kirikiri Z를 사용하는 게임의 경우

 

 

이렇게 엔진 파악이 끝났다면, 각 엔진의 특성을 이해하셔야 합니다.

 

2에서 Z로 넘어오면서 여러 차이점이 발생했습니다만, 가장 중요한 점은 Z에선 UTF-8을 지원한다는 겁니다.

다시 말하자면, Z는 몇 가지 가공을 거친다면 한국어 윈도우를 포함한 일본 외의 윈도우에서도 사용이 가능합니다.

 

어, 그런데 잠깐.

키리키리 2를 다룬 다른 글을 봤더니, 키리키리 2도 유니코드를 지원한다는데요?

 

네. 일단은 그렇습니다.

하지만 키리키리 2가 지원하는 것은, 정확히 말하자면 UTF-8이 아닌 UTF-16LE입니다.

 

UTF-8의 경우 현재 몇몇 OS (특히 Linux 계열, BSD 계열) 등에서 커널 내 인코딩으로 활용하려는 움직임이 있습니다.

그런 OS의 경우 대개 UTF-8을 네이티브로 지원합니다.

하지만 윈도우 커널의 경우, UTF-16LE를 커널 내에서 사용 중입니다.

키리키리 2도 마찬가지로 UTF-16LE를 그런 차원에서 지원하는 것이므로, Z와는 조금 사정이 다릅니다.

 

실제 사례를 들자면, 키리키리 Z를 사용한 <Re:LieF>의 경우에는 텍스트 인코딩을 전혀 손볼 필요가 없습니다. 패키지를 언패킹하자마자 전부 UTF-8로 인코딩되어 있더군요.

하지만 키리키리 2를 사용하는 <밤을 헤매는, 우리들의 미아교실>은 모든 텍스트를 UTF-16LE로 변환할 필요가 있었죠. 그래서 Shift-JIS를 전부 UTF-16LE로 변환한 뒤에서야 한글화 과정을 진행할 수 있었습니다.

 

또한, 키리키리 2의 경우에는 스크립트 엔진 내의 텍스트 인코딩 기본값이 Shift-JIS이기 때문에, 소스를 한글화한다 해서 exe 파일을 실행만 하면 킬 수 있는 것도 아닙니다. 소스는 소스대로 한글화하되, exe 파일을 실행시킬 로케일 에뮬레이터 또한 필요로 합니다.

 

요약하자면,

 

Kirikiri Z - UTF-8을 네이티브 지원. 한글 윈도우 상에서 실행 가능

Kirikiri 2 - 내부에서도 Shift-JIS를 사용. 반드시 로케일 변경이 필요.

 

가 되겠습니다.

 

2. 언패킹

 

키리키리가 오픈소스인 덕에, 다른 엔진들보다 언패킹이 훨씬 쉽습니다.

많은 툴들이 있지만, 저는 Garbro를 가장 신뢰합니다. 업데이트도 잦고, 기여자도 많습니다.

물론 다른 프로그램을 주로 사용하셨다면 그 프로그램을 사용하셔도 전혀 무방합니다.

 

먼저 Garbro를 다운로드 받습니다. 제가 올리면 뭐 이런저런 문제가 있을 수 있기에, 공식 페이지를 링크하겠습니다.

 

https://github.com/morkt/GARbro/releases

morkt/GARbro

Visual Novels resource browser. Contribute to morkt/GARbro development by creating an account on GitHub.

github.com

setup 버전을 받으셔도 되고, zip으로 압축된 포터블 버전을 받으셔도 됩니다.

저는 편의상 포터블로 씁니다.

 

 

 

포터블의 경우에는 이 파일을 실행시키세요.

 

 

아무튼 설치하고 실행을 하시면,

 

 

 

 

 

대충 이런 화면이 나옵니다.

 

여기서 파일-열기를 누르시고, 언패킹을 원하시는 xp3 파일을 엽니다.

그러면 짜잔! xp3 파일의 내부 모습이 나타납니다.

 

어, 근데 xp3가 여러 개인데 어떤 파일을 열어야 하나요?

 

키리키리를 어떻게 개조하느냐에 따라 xp3 파일의 개수도 달라집니다만, 보통 1개의 파일은 반드시 존재합니다.

바로 data.xp3입니다.

 

이름만 봐도 데이터같고, 실제로 그 안에는 대부분의 스크립트와 데이터가 잠들어 있습니다.

bgimage.xp3나 evimage.xp3가 바깥으로 나와 있을 수 있고, 패치를 설치하셨다면 patch.xp3도 있을 수 있습니다만, 그런 건 전부 부차적인 요소니까 나중에 설명하도록 하겠습니다.

 

아무튼, 우리는 가장 먼저 data.xp3를 조져야만 합니다.

 

 

 

만만하니까 마이테츠를 조져 보겠습니다.

 

 

여기서 예시로 들 파일은 마이테츠입니다.

마이테츠의 data.xp3를 쪼개 보면, 다음과 같은 구성요소가 나타납니다.

일단 저건 신경쓰지 마시고, F4를 눌러 보십시오.

 

 

 

 

 

그러면 이렇게 알기 쉬운 대화창이 나타납니다.

위 이미지와 동일한 설정으로, 저장 경로는 편하실 대로 추출해 주세요.

(자동으로 추출 폴더가 생겨나는 게 아니니까 새로 하나 만들어 주시면 편합니다!)

 

그러면, Garbro가 알아서 내용물을 추출해 줍니다!

 

물론, xp3 파일 자체가 암호화된 경우도 있습니다.

이 경우에는 열기 전에 어떤 게임인지 물어보니까 게임 이름을 잘 찾아서 맞춰주시면 됩니다.

없다면, 그냥 No Crypt(암호화 안 됨)으로 두고 푸시면 됩니다.

 

그래도 안 된다? 그러면 노가다입니다. 맞는 게 나올 때까지 시도해 주세요......

 

 

3. Kirikiri의 구성

내용물도 다 풀어보았으니 무슨 내용인지 확인해 볼까요?

 

다시 말하지만 Kirikiri는 오픈소스이기 때문에 게임마다 케바케가 심합니다. 이런 걸 전문용어로 '파편화'라고 합니다.

어떤 게임은 정말 심플하게 필요한 것만 있다 하면, 온갖 부가기능과 플러그인을 우겨넣어서 이게 키리키리인지 유니티인지 모를 게임도 부지기수입니다.

 

아래서 설명할 폴더와 파일들은 키리키리를 사용한 게임들에 대개 들어 있는 파일들입니다.

게임에 따라 있을 수도 있고, 없을 수도 있습니다.

 

 

bgm

배경음악입니다. 열어 보시면 ogg 형식으로 된 음악파일이 나옵니다. 작업하면서 들으시면 정신건강에 이롭습니다.

 

evimage

EVent IMAGE라서 evimage입니다. 이벤트성 CG, 야한 CG가 대부분 여기에 들어 있습니다.

 

bgimage

BackGround IMAGE라서 bgimage입니다. 배경은 전부 여기에 있습니다. 가끔 아이캐치나 타이틀 화면이 여기 들어 있기도 합니다.

 

fgimage

ForeGround IMAGE라서 fgimage입니다. 캐릭터나 사물 등, 배경 앞에 나오는 이미지가 이곳에 있습니다. 미연시 화면에 출력되는 완전한 이미지가 아니라, 보통 눈코입이 분리된 이미지로 들어간 경우가 많습니다. (몇몇 게임들은 모든 경우의 수를 조합한 완성 이미지를 넣어두기도 하지만, 굳이 그럴 필요가 있을까요?)

 

image

시스템에서 사용하는 아이콘들, 대화창들, 어쩌면 타이틀 배경파일까지 여기 잠들어 있습니다. 주로 png 파일로 저장되며, 가끔씩 전용 형식으로 패킹된 경우가 있습니다. 대부분의 툴은 이미지 변환까지 지원해주고, Garbro도 마찬가지이므로 안심하십시오.

 

k2compat

특정 게임에서만 사용하는 파일입니다. 대개의 게임에는 없습니다. 무시하셔도 됩니다.

 

main

게임 스크립트 파일이 들어 있습니다. 몇몇 게임에는 없습니다.

 

scenario

대개의 경우 게임 시나리오 파일이 들어 있습니다. 저희가 바로 목적하는 그 폴더입니다!

...하지만, 몇몇 경우 시나리오가 딴 곳에 들어 있습니다.

 

scn

특이한 경우 바로 이 scn 폴더 내에 시나리오 파일들만 모아 놓습니다.

키리키리는 개발자 키트 내에 txt나 ks파일을 scn이라는 형식으로 암호화하는 기능을 제공하는데, 특정 게임들은 암호화된 형식을 사용합니다. 물론, 이것도 이미 뚫어놓으신 용자가 존재합니다.

 

sound

시스템 사운드가 들어 있습니다.

 

sysscn

게임 스크립트 파일이 들어 있습니다. 몇몇 게임에는 없습니다. main과 마찬가지 입장입니다.

 

system

키리키리 구동의 핵심을 담당하는 가장 중요한 파일이 몰려 있습니다. 지금까지 '게임 스크립트'라고 표현했던 많은 파일들이 있습니다만, 그것들도 이 system 내의 파일들이 없으면 무용지물입니다.

 

video

오프닝, 엔딩 등의 비디오를 보관합니다.

확장자는 wmv, avi를 지원하고, 코덱은 wmv7까지 지원하나 용량 손해를 감수하더라도 mpeg2가 가장 무난합니다.

음성은 wmv가 가장 무난합니다.

 

voice

성우들이 녹음한 음성 데이터가 들어 있습니다. 역시 ogg입니다.

 

 

뭔가 엄청 많았는데, 대충 감이 잡히시는지요? 어떤 걸 수정하고, 어떤 걸 내버려둬야 하는지?

게임이 대개 텍스트로 이루어지니만큼, 저희들은 주로 scenario나 scn과 싸우게 될 겁니다.

하지만 그뿐 아니라, 몇몇 경우 시스템 설정을 건드려야 하기에 system이나 main 등도 많이 들락날락하게 될 거고요.

 

아무튼, 어디를 들어가던 간에 저희가 만져야 할 것은 텍스트입니다.

키리키리에서 사용하는 텍스트 파일은 다음과 같습니다.

 

tjs

키리키리 엔진의 핵심을 담당하는 파일들입니다. Javascript의 유사 언어인 TJS라는 프로그래밍 언어를 사용합니다. 구조 자체는 자바스크립트와 별반 차이 없기에 개발 경험이 있으신 분들은 빠르게 적응하실 것 같습니다.

 

ks

게임 동작에 영향을 미치는 명령줄 구문입니다. 몇몇 게임은 ks로 시나리오를 작성하기도 하고, 몇몇 게임은 txt로 작성하기도 합니다만, 대개 '스크립트'는 ks에서 실행된다 보시면 됩니다.

 

txt

시나리오에만 제한적으로 사용됩니다. 이 경우 scn으로 암호화된 케이스가 많습니다.

 

 

텍스트 외에도 다른 형식의 데이터베이스가 존재할 수 있습니다.

 

 

csv

엑셀 등의 프로그램으로 열 수 있는 데이터베이스 형식입니다. 주로 캐릭터의 눈코입을 얼굴과 끼워맞추기 위해 사용합니다.

Shift-JIS 형식의 게임이라면, 가능한 한 UTF-16LE로 변환하지 마세요. 캐릭터가 사라지는 마술이 벌어집니다.

 

info.txt

평범한 txt파일 같지만, 사실 위의 csv 파일과 연계되어 작동하는 파일입니다. 마찬가지로, 가능한 한 Shift-JIS로 놔두세요.

 

 

4. 텍스트 편집 환경 구성

 

그럼 파일들까지 열어 봤겠다, 한번 직접 수정을 해 볼까요?

하지만 일반 메모장이나 워드로 이것들을 수정하기에는 너무 번거롭습니다. 좀 더 스마트한 도구가 필요합니다.

 

기존의 많은 미연시 번역 가이드에서는 'Editplus'를 추천했고, 실제로 에디트플러스는 오랫동안 쓰여온 유용한 툴입니다.

허나 에디트플러스는 기본적으로 유료 툴이고, 불법 사용도 불편한데다 께름칙합니다.

 

그래서 저는 오픈소스 에디터인 Visual Studio Code를 사용합니다.

유명한 IDE인 Visual Studio의 에디트 창만 똑 떼와서 사용하는 거라, 추후에 프로그래밍 작업에 들어갈 때도 유용한 기능이 많이 붙어 있습니다. 최근에는 단점도 많이 개선됐고요.

 

다운로드는 여기서 하시면 됩니다.

 

https://code.visualstudio.com/

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

 

다운로드받아 설치하시면 모든 메뉴나 설정이 영어로 되어 있을 겁니다.

영어 환경이 익숙하다면 그대로 쓰시면 되고, 한국어로 쓰고 싶으시다면 다음과 같이 따라하시면 됩니다.

 

 

 

 

 

테마는 좌측 하단 톱니바퀴를 클릭해서, 색 테마를 누르시면 변경하실 수 있습니다.

 

작업 환경도 전부 갖추어졌다면 이제 한번 스크립트 파일을 열어 보겠습니다.

 

 

 

kirikiri의 Startup.tjs 파일 캡쳐. 이 파일은 오픈소스 프로젝트의 일부이므로 누구나 열람할 수 있습니다.

 

 

코드를 보니 벌써부터 빡치는군요.

괜찮습니다. 저희는 프로그램을 개발하는 게 아니라, 그냥 텍스트만 보고 프로그램의 흐름을 쫓아가기만 하면 되니까요.

 

그럼, 다음 편에서 뵙겠습니다. 언제 이어질지는 모르겠지만.

 

 

<용어설명>

더보기

용어설명

ASCII : 아스키. 미국정보교환표준부호(American Standard Code for Information Interchange). 컴퓨터 초창기에 문자를 나타내기 위해 만들어진 7비트 인코딩. 로마자와 숫자, 그리고 일부 특수기호만을 사용할 수 있었다.

 

Shift-JIS : 아스키 코드가 표현하지 못하는 각 언어 문자를 표현하기 위해, IBM에서는 7비트인 아스키에 1비트를 추가하여 8비트 문자 인코딩을 만들었다. 이 중 8비트 형식을 이용하여 일본어를 표현한 비표준 규격이 Shift-JIS이다. 국제화가 진행되어 Unicode가 등장한 지금도 일본에서는 널리 사용되는 규격 중 하나다.

 

Unicode : 유니코드.문자 인코딩의 파편화와 호환성 문제로 인해 등장한 인코딩. 전 세계의 모든 문자를 표기하는 것을 목표로 하고 있다. 초창기에는 2바이트(16비트) 인코딩을 사용했지만 현재는 4바이트까지 늘어난 상태. 과거 아스키 시절에는 궯뛠쉛뭷 같은 문자를 쓸 수 없었지만, 유니코드는 한글의 모든 자모를 경우의 수로 조합한 '한글 조합형'을 채택한 덕분에 저런 이상한 문자도 표기할 수 있게 되었다.

 

UTF-8 : 유니코드를 표현하는 인코딩 중 하나. 유니코드가 4바이트 이상을 사용하는 것과 별개로, 영어나 숫자 같은 아스키 시절 문자들은 1바이트만을 소모하기 때문에 4바이트를 할당하는 인코딩은 비효율적이다. 따라서, UTF-8은 문자가 배치된 위치에 따라 길이를 달리한다. 그래서 흔히 UTF-8을 "가변 길이 인코딩"이라 부른다.

 

UTF-16 : UTF-8과는 사뭇 다른 가변 길이 인코딩이다. 기본적으로 2바이트 이상을 사용한다. UTF-16의 경우 아스키 문자를 2바이트로 표현하는데다, 아스키와의 호환성도 좋지 않아서 웹 환경에서는 잘 사용되지 않는다. 하지만 윈도우 커널에서는 UTF-16을 기본으로 이용하기 때문에 프로그램 단에서의 사용도는 높다. UTF-16의 경우 LE(리틀 엔디안)과 BE(빅 엔디안)이 존재하는데, 각각 바이트 순서가 역방향/정방향이다. 윈도우에서는 주로 UTF-16LE를 사용한다.

 

BOM : 유니코드 인코딩을 알려주는, 파일 첫머리에 존재하는 코드. UTF-8은 BOM을 잘 사용하지 않지만 윈도우 메모장에서는 UTF-8(BOM)을 기본으로 셋팅하기 때문에 주의할 것.