Doki Doki Literature Club! Guide

Ren'Py製ゲームの翻訳パッチ作成方法 for Doki Doki Literature Club

Ren’Py製ゲームの翻訳パッチ作成方法

Overview

DDLCの日本語化のために調査したものです。多分他のRen’Py製ゲームでも同様の方法が使えるはずです。

0. はじめに

[link]
このような日本語化をするために試した手順を書いていきます。

とりあえず現状わかっていることを雑にまとめただけなので少しずつわかりやすく書き直したいと思います。
分からない点がありましたらコメント欄にてご指摘お願いします。

他所を参考にDDLC翻訳作業所[docs.google.com]を試作してみました。

こちらも参考になると思います:
Ren’Py製ゲーム翻訳の手引き | まださなぎ[dettalant.com]

参考にしました:
[link]
[link]

1. ゲームのアンパック・デコンパイル

ゲームをソースコードまで戻し、原文を取り出します。
こちらに詳しく書き直してます:Ren’Py 製ゲームのソースコードを覗く – Qiita[qiita.com]

1-1. Pythonのインストール・環境変数の設定

アンパック、デコンパイルに使用するツールはPythonで書かれているので、Pythonが動作する環境を準備します。

Python公式サイト[www.python.org]からPythonをダウンロードしインストールします。
色んなバージョンがありますがどう違うのか私にはよくわかりません。
私はv2.7.14 32bit版を使っていますが特に問題は起きてないので”Download Python 2.7.14″からダウンロードすればいいでしょう。

Pythonは大きく分けてバージョン3と2の2種類が存在します。Ren’Pyはバージョン2を使用しているので、バージョン2の最新版をダウンロードしてください。

またインストールするときは“Add python.exe to Path”を”Will be installed on local hard drive”に変更すると環境変数の設定を勝手にやってくれます。
うっかり付け忘れても場合はggって手動設定すれば大丈夫です。

1-2. rpaファイルのアンパック


スクリプトファイルを取り出すため、rpaファイルをアンパックします。

GitHubからrpatool[github.com]をダウンロードします。

使い方はコマンドプロンプトから以下のコマンドを入力します。

python rpatool -x [アンパックしたいrpaファイル]

ソースデータは”Doki Doki Literature Clubgamescripts.rpa”に全て入っています。中には不純物もありますが必要なのでちゃんと取っておきましょう。

1-3. rpycファイルのデコンパイル


アンパックによりrpycファイルが得られましたが、コンパイルされた状態のため内容を読むことができません。
そのためデコンパイルによりソースファイルに戻し、内容を読める状態にします。

unrpyc[github.com]のソースコードをダウンロードします。
※バイナリ版だとなぜかエラーになってしまうので、ソースコードを実行する

使い方はコマンドプロンプトから以下のコマンドを入力します。

python unrpyc [デコンパイルしたいrpycファイル]

“scripts.rpa”にパックされていたrpycファイル全部をデコンパイルしましょう。

2. 翻訳環境構築

ソースコードを取り出せたので次は翻訳パッチを作成するための環境を作成します

2-1. 必要なRen’Pyバージョンの確認


使用するRen’Py SDKのバージョンを、ゲーム本体のビルドに使われたバージョンと揃える必要があります。

ゲーム本体のビルドに使われたバージョンは、ゲームのインストールフォルダにある“log.txt”から確認できます。

右はDDLCの場合で、6.99.12でビルドされたことがわかります。

2-2. Ren’Py SDKの準備

Ren’Py公式サイトからRen’Py SDKをダウンロードします。最新版はこちらに[www.renpy.org]古いバージョンはこちらに[www.renpy.org]あります。

十分な容量のあるドライブの適当な場所に解凍して”renpy.exe”を実行します。起動にやたら時間がかかるのでお茶でも飲みながら待ちましょう。


Ren’Py SDKは日本語に切り替えることができます。
プロジェクトの言語に影響するらしいので日本語に設定しましょう。
右下の“preferences”>右の”Language”から“Japanese”を選ぶと日本語になります。
左下の“Return(戻る)”から元のメインメニューに戻れます。

2-3. プロジェクトの作成

まずゲーム本体の入ったフォルダをそのままrenpy.exeのあるフォルダへコピーします。
以下のようなファイル構成になると思います。
Ren’Py SDKを再度開き、プロジェクト内にゲーム本体の入ったフォルダの名前が増えていれば成功です。

“Ren’Py” ├ “[ゲーム名]” │ └ 実行ファイルなど └ “renpy.exe”など

次に作成したプロジェクトにDDLCのソースを展開します。

  • “launchergamefontsMTLc3m.ttf”“[ゲーム名]game”フォルダにコピー
  • アンパックした“scripts.rpa”の内容物を全て“[ゲーム名]game”フォルダにコピーします。
  • デコンパイルしたしたrpyファイルを全て“[ゲーム名]game”フォルダにコピーします。
  • “scripts.rpa”を削除

以上の操作を行うとフォルダの内容は以下のようになります。

“[ゲーム名]” └ “game” ├ “audio.rpa” ├ “fonts.rpa” ├ “images.rpa” ├ (“scripts.rpa”の内容物) └ (デコンパイルしたしたrpyファイル)

再びRen’Py SDKを開き、操作したプロジェクトを選んで右下の”プロジェクトの起動”を選びます。
英語のタイトル画面が表示されればひとまず準備完了です。
DDLC既プレイの場合はセーブデータの削除確認画面を挟むので焦らないようにしましょう。(1敗)

2-4. 翻訳の生成

※DDLC本編翻訳の場合は、スプレッドシートから出力したファイルを“[DDLC]gametlJapanese”に配置するだけでOKです


Ren’Py SDKの”翻訳の生成”機能を使用して翻訳の雛形を作成し、フォントを差し替えます。

メインメニュー右の”翻訳の生成”を選びます。


“言語:”の下に”Japanese”と入力し、”翻訳の生成”を選びます。

“翻訳を空の文字列で生成する”にチェックを入れるとデフォルトの翻訳が空欄になってしまいます。入れない場合はデフォルトの翻訳に原文が入っているのでチェックを入れないほうが便利だと思います。

成功した場合は”[プロジェクト名]gametlJapanese”に翻訳スクリプトの雛形が保存されています。

2-5. フォントの差し替え

ゲーム内のフォントを日本語対応のものに差し替えます。

まず適当な日本語フォントを用意し、“[ゲーム名]gameguifont”に配置します。DDLC日本語化では18/01/03現在以下のフォントを使用しています。

次に“[ゲーム名]gametlJapanesescreens.rpy”を開き、以下の文を追加します。
この辺りはゲームによって大きく差異があると思うので要調整です。

init python: config.language = “Japanese” translate Japanese python: gui.default_font = “gui/font/VL-Gothic-Regular.ttf” gui.name_font = “gui/font/VL-Gothic-Regular.ttf” gui.interface_font = “gui/font/VL-Gothic-Regular.ttf” gui.button_text_font = gui.interface_font gui.choice_button_text_font = gui.default_font gui.choice_button_borders = Borders(10, 5, 10, 5) translate Japanese style edited: font “gui/font/VL-Gothic-Regular.ttf” translate Japanese style poemgame_text: font “gui/font/mikachanALL.ttc” translate Japanese style navigation_button_text: font “gui/font/VL-Gothic-Regular.ttf” translate Japanese style game_menu_label_text: font “gui/font/VL-Gothic-Regular.ttf” translate Japanese style pref_label_text: font “gui/font/VL-Gothic-Regular.ttf” translate Japanese style check_button_text: font “gui/font/mikachanALL.ttc” translate Japanese style radio_button_text: font “gui/font/mikachanALL.ttc”

もう一度Ren’Py SDKを起動し、”プロジェクトの起動”を行い、タイトルが日本語化されたら成功です。

3. 翻訳

3-1. 台詞の翻訳

生成された翻訳ファイル内の“translate Japanese ~_~:”は指定されたラベルのソースコード一行を別の文へ置き換えるものです。
例えばDDLCで以下のように記述した場合、ニューゲーム直後のサヨリの台詞が、モニカの”test”という台詞に置き換わります。

translate Japanese ch0_main_41e273ca: m “test”

重要なのは台詞だけでなく一行まるごと差し替わるため、話すキャラや立ち絵なども変更可能なことです。
また複数行にまたがる翻訳や、Python文の実行も可能です。

3-2. 選択肢、名前などの翻訳

“translate Japanese strings:”はソースコード内の“old”で指定された文字列を“new”で置き換えるものです。
例えばDDLCで以下のように記述した場合、ソースコード中の”Monika”という文字列が”モニカ”という文字列に置き換わります。

translate Japanese strings: old “Monika” new “モニカ”

こちらは完全一致で置き換えるため、”Monika”を含む台詞などは翻訳されないはずです。
主に選択肢や文字列型変数の翻訳に使用します。

3-3. 文字列型変数の翻訳

Ren’PyではSay文中に[変数名]で文字列型変数の埋め込みが可能です。
DDLCではプレイヤー名は[player]、サヨリの質問(一緒に帰りたいと聞かれたらどうするか)では[ch2_winner]というように埋め込んでいます。

文字列型変数への代入文は台詞や選択肢のようには翻訳されません。
しかし、変数名の後ろに”!t”を追加することで選択肢と同じように翻訳が可能になります。
先程のサヨリの質問の場合では翻訳後の文章に[ch2_winner!t]と埋め込むことで翻訳を反映させています。

3-4. 画像やテキストファイルの翻訳

翻訳に伴い画像やテキストファイルなどの差し替えが必要な場合、“gametlJapanese”内に差し替え後のファイルを置くだけで差し替わります。

例えばDDLCの“guipoem_dismiss.png”を翻訳したい場合、“gametlJapanesegui”内に差し替え後の“poem_dismiss.png”を置くことで差し替わります。

3-5. Python文の置き換え

DDLCのプレイヤー名入力の日本語対応のように、単純に翻訳するだけでは足りない場合があります。
その場合はある程度の範囲のPython文をまるごと置き換えることが可能です。

以下はDDLCのプレイヤー名入力部分のソースコードです。(引用して大丈夫かな)

init -501 screen name_input(message, ok_action): modal True zorder 200 style_prefix “confirm” add “gui/overlay/confirm.png” key “K_RETURN” action [Play(“sound”, gui.activate_sound), ok_action] frame: has vbox: xalign .5 yalign .5 spacing 30 label _(message): style “confirm_prompt” xalign 0.5 input default “” value VariableInputValue(“player”) length 12 allow “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz” hbox: xalign 0.5 spacing 100 textbutton _(“OK”) action ok_action

これを日本語対応にする場合、以下のような文を翻訳に追加します。

translate Japanese screen: screen name_input(message, ok_action): modal True zorder 200 style_prefix “confirm” add “gui/overlay/confirm.png” key “K_RETURN” action [Play(“sound”, gui.activate_sound), ok_action] frame: has vbox: xalign .5 yalign .5 spacing 30 label _(message): style “confirm_prompt” xalign 0.5 input default “” value VariableInputValue(“player”) length 12 pixel_width 168 hbox: xalign 0.5 spacing 100 textbutton _(“OK”) action ok_action

つまりクラスのメソッド一つを翻訳ファイルから置き換えることが可能です。MinecraftのMODもこれくらい簡単に既存クラスを書き換えられたら楽なのに

4. 配布

4-1. options.rpyへの追記

“options.rpy”内にはビルド時にパックするファイルを指定する文があります。
以下はDDLCの場合の例です。

init python: build.archive(“scripts”, “all”) build.archive(“images”, “all”) build.archive(“audio”, “all”) build.archive(“fonts”, “all”) build.classify(“game/**.jpg”, “images”) build.classify(“game/**.png”, “images”) (中略) build.documentation(‘*.html’) build.documentation(‘*.txt’) build.include_old_themes = False define build.itch_project = “teamsalvato/ddlc”

ここの“build.archive(“fonts”, “all”)”“build.classify(“game/**.jpg”, “images”)”の間に以下の文を追加します。

build.archive(“jp”, “all”) build.classify(“game/tl/Japanese/**.jpg”, “jp”) build.classify(“game/tl/Japanese/**.png”, “jp”) build.classify(“game/tl/Japanese/**.txt”, “jp”) build.classify(“game/tl/Japanese/**.chr”, “jp”) build.classify(“game/tl/Japanese/**.pdf”, “jp”) build.classify(“game/gui/font/*.ttf”, “jp”) build.classify(“game/gui/font/*.otf”, “jp”)

こうすることで、ビルド時に日本語化に必要なファイルを纏めた”jp.rpa”が生成されるようになります。

4-2. ビルド

5. おまけ

5-1. コードエディタ

テキストエディタなら何を使っても問題ありません。
ですが、拡張機能によってRenPy向け機能を追加できる、以下のどちらかがおすすめです。
どちらもOSを選ばず、軽量で多機能、日本語化も可能です。

Atom

本体ダウンロード[atom.io]
GitHub社製のコードエディタです。設定方法はここに大体まとまってます。[qiita.com]

Atom用Ren’Py用拡張機能ダウンロード[atom.io]
Ren’Pyスクリプトの構文ハイライトとスニペットなどを追加します。

Visual Studio Code

本体ダウンロード[www.microsoft.com]
Microsoft製のコードエディタです。Visual Studioと名を冠していますが、本家VSとは異なりmacOSやLinuxでも動作しますし、動作も軽快です。

VSCode用Ren’Py用拡張機能ダウンロード[github.com]
残念ながらRen’Py用拡張機能は現在マーケット上から消えてしまっているようですが、GitHub上で開発が進んでいます。

他にもSublime TextというコードエディタもRen’Py用拡張機能があるようですが、よく知らないので名前だけ挙げておきます。

SteamSolo.com