RuneTranslateがYU-RISのビジュアルノベルを翻訳できるようになりました
RuneTranslateがYU-RISエンジン(raiL-soft)のビジュアルノベルを英語と30以上の言語に翻訳できるようになりました。純粋なTypeScriptで.ypfパッケージとysbin.ypf内のコンパイル済みYSTBスクリプトを読み込み、各スクリプトのXORキーを自動的に復元し、日本語の台詞を抽出し、翻訳済みスクリプトを個別ファイルとして書き出すため、ゲームは再パックなしで読み込みます。追加されたばかりで多くの実ゲームでは未検証です — 開かないゲームがあれば報告してください。
RuneTranslateは、ファン翻訳者たちにとって長らく壁となってきたもう一つのエンジンを読み込めるようになりました。数百本の同人・商業の日本語ビジュアルノベルを支える、raiL-softによるWindows向けスクリプティングエンジン YU-RIS です。YU-RISゲームのフォルダを開き、.ypfアーカイブで埋め尽くされたpac/ディレクトリと、中身に読めるものが何もないysbin.ypfを見つけて諦めた経験があるなら——それがこのエンジンです。RuneTranslateはこれを検出し、それらのパッケージを純粋なTypeScriptで開き、コンパイル済みスクリプトから台詞を読み取り、ゲームが自力で読み込む翻訳済みコピーを書き出します。RuneTranslateが対応する最新のエンジンです。
これはまったく新しいエンジンであり、正直な話を先にしておきます。YU-RIS対応はできたばかりで、多くの実ゲームではまだ検証されていません。ですので何よりもまず——RuneTranslateをYU-RISゲームに向けて、検出されない、開かない、あるいはゲームが読み込めないものが書き出される場合は、ぜひ教えてください。方法については末尾で詳しく説明します。
YU-RISエンジンとは実際に何なのか
YU-RIS(ゆーりすと表記されることもあります)は、raiL-softによる日本語ビジュアルノベル向けのスクリプティングエンジンです。完成したYU-RISゲームは、Windowsの.exeに加え、絵・音声・スクリプトを収めた一連の.ypfパッケージアーカイブ——通常はpac/フォルダ内——で構成されます。シナリオ自体はコンパイルされています。開発者が書く読めるスクリプトは YSTB というバイナリ形式にビルドされ、ysbin.ypf内の.ybnファイル(ysbin/yst00000.ybnのような内部パス)として保存されます。この「パックされたアーカイブの中のコンパイル済みシナリオ」という組み合わせこそが、このエンジンの膨大な旧作カタログを通常の機械翻訳ツールの手の届かないところに留めてきたのです。
なぜYU-RISゲームは翻訳がこれほど難しかったのか
Ren'Pyのようなソース駆動のエンジンと比べ、YU-RISはテキストを幾重もの層の奥に隠します:
- すべてが`.ypf`パッケージの中にあります。 スクリプトはディスク上に個別に置かれておらず——難読化されたファイル名とzlib圧縮されたエントリとともに、YU-RIS独自の
.ypfコンテナにパックされています。その形式を読むリーダーがなければ、そもそも編集するものが何もありません。 - シナリオはテキストではなくコンパイル済みです。
.ybnはメモ帳で開けるスクリプトではなく——4つのセクション(命令ストリーム、引数ディスクリプタテーブル、文字列テーブル、行番号)に分かれたバイナリのYSTBコンテナです。実際の日本語は文字列テーブルにあり、ディスクリプタから参照されます。 - スクリプトはXORで暗号化されています。 各
YSTBスクリプトの4つのデータセクションは4バイトのキーでスクランブルされています。どのテキストも読めるようにするには、まずそのキーを復元しなければなりません——しかもキーはゲームごとに異なります。 - すべての文字列が台詞というわけではありません。 文字列テーブルには、スクリプトのロジックが比較対象とする変数名・アセットパス・式のオペランドも入っています。そのどれかを誤って翻訳すると、ゲームの進行が静かに壊れます。
結果として、流暢に読める人であっても、まず独自形式のアーカイブを展開し、次にコンパイル済みバイナリを解析し、次にXORを破り、次に台詞をエンジンの内部文字列と見分ける——一行が翻訳される前にそれだけの作業が必要でした。その作業を、RuneTranslateが今あなたの代わりに行います。
RuneTranslateが今できること
RuneTranslateはYU-RISを一級のエンジンとして扱い、パイプライン全体を純粋なTypeScriptで処理します——外部ツールなし、Pythonのサイドカーなし、インストールするものは何もありません:
- `.ypf`パッケージを直接読みます。 アーカイブを自前で開き、エントリを解凍し、難読化されたファイル名を復元します——GARbroも別の展開ツールも不要です。すでに自分でゲームを展開済みですか?
.ybnスクリプトが入った個別のysbin/フォルダも検出されます。 - コンパイル済みの`YSTB`スクリプトを解析し、暗号化を破ります。 各スクリプトの4バイトのXORキーを引数ディスクリプタテーブルから自動的に復元し、Shift-JISの文字列テーブルをデコードし、すべての日本語の行をスクリプトファイルごとにまとめてエディタに一覧表示します。
- 台詞と仕掛けを見分けます。 変数名・アセットパス・式のオペランドは表示されますがデフォルトで除外され——赤いオプトインの行として示されます——ので、ストーリーのロジックが比較対象とする文字列を誤って翻訳することは決してありません。
- インラインの制御コードを保持します。 メッセージ本文に織り込まれたバックスラッシュコード(改行、色、ルビ)や角括弧のタグは、何かがプロバイダーに届く前に数値のプレースホルダーの背後にマスクされ、出力時に正確に復元されます。
- 再パックせずに書き出します。 書き出し時に各翻訳済みスクリプトを再構築し——長い/短い翻訳が収まるよう文字列テーブルのオフセットをパッチし、同じXORキーを再適用したうえで——
.ybnを元のアーカイブパスに個別ファイルとして書き込みます。YU-RISランタイムは、.ypfにパックされた同じパスよりも個別ファイルを優先するので、ゲームは単純にあなたの翻訳を読みます。再パックはありません。(これは当社のKirikiriパッチフローやArtemis対応と同じ、個別ファイルによる上書き方式です。)
日本語 → 英語が最適ですが、30以上の言語のいずれも対象にできます——スペイン語、フランス語、ドイツ語、ポルトガル語、ロシア語、中国語、イタリア語、トルコ語、ベトナム語など。
必要なもの
- Windows版RuneTranslate——無料。すべてのエンジンとプロバイダーがアンロックされています(無料プランで制限されるのは速度であって機能ではありません)。
- YU-RISゲームのフォルダ。ゲームの
yu-ris.exeとその.ypfパッケージが入ったディレクトリです(通常はpac/サブフォルダ内、スクリプトはysbin.ypfに入っています)。 - 対象言語——英語、スペイン語、フランス語、ドイツ語、ポルトガル語、ロシア語、中国語、イタリア語、トルコ語、ベトナム語、ほか20以上。
- 翻訳プロバイダーを1つ。無料のGoogle Translateはそのまま使え、DeepLには無料プランがあり、OpenAI・Anthropic・ローカルモデル(Ollama / LM Studio)・OpenAI互換のあらゆるAPIは自分のキーを持ち込んで使います。YU-RISゲームは台詞が多いので、通常はLLM(OpenAI / Anthropic)かDeepLが最も自然に読めます。
ステップ1: ゲームフォルダを開く
RuneTranslateを起動し、新規プロジェクトをクリックして、YU-RISゲームのディレクトリを指定します。エンジン検出は自動で実行され——.ypfパッケージ(または.ybnスクリプトの入った個別のysbin/フォルダ)を見つけると、プロジェクトをYU-RISとして認識します。元のゲームフォルダが変更されることは決してありません。
ステップ2: スクリプトはどう読み込まれるか
RuneTranslateは.ypfパッケージを開き、コンパイル済みのYSTBスクリプトをysbin.ypfから取り出し、各スクリプトのXORキーを復元し、Shift-JISの文字列テーブルをデコードします——そしてすべての日本語の行をファイルごとにまとめてエディタに一覧表示します。エンジンの内部文字列(変数名、アセットパス、式のオペランド)は表示されますがデフォルトで除外され、インラインの制御コードはプロバイダーが決して壊さないよう数値のプレースホルダーの背後にマスクされます。
ステップ3: 翻訳する
プロバイダーを選んで実行します。ビジュアルノベルなら、キャラクターの声色やトーンにはLLM(OpenAI / Anthropic)が最適で、地の文にはDeepLが速くてきれいで、短いメニュー文字列や選択肢には無料のGoogle Translateで十分です。ゲーム全体で名前が同じ表記になるよう、登場人物や繰り返し出てくる用語の用語集をあらかじめ作っておきましょう——用語集101を参照してください。仕上げに、AIリファイナーによる任意のパスをかけると、各行を文脈の中で読み直し、機械翻訳が残しがちな硬い直訳調の言い回しを引き締めてくれます。
ステップ4: すぐ遊べるコピーを書き出す
エクスポートをクリックします。RuneTranslateは、再構築した各.ybnを元のアーカイブパスに個別ファイルとして置き、手を加えていない.ypfパッケージと並べた翻訳済みのゲームコピーを書き出します。再パックはありません——YU-RISはパックされた元ファイルよりも個別スクリプトを優先して読み込むので、ゲームは単にあなたの翻訳を読みます。実行すれば、対象言語でプレイできます。
既知の制限
- YU-RISの文字列はShift-JIS(cp932)です。 英語やその他cp932で表現できる対象言語はきれいに書き出せます。cp932の範囲外の文字を使う対象言語——拡張キリル文字、韓国語、繁体字中国語——には、まだ自動化されていないゲームフォント/エンコーディングのハックが必要です。
- 個別ファイルによる上書きが想定される読み込み経路であり、ほとんどのYU-RISゲームでは、エンジンがパックされたコピーよりも個別スクリプトを優先するため機能します。それを尊重しない稀なタイトルでは、書き出しを調整する必要があるかもしれません——まさに、私たちがまだ確認中の実ゲームの挙動です。
- 画像の絵に焼き込まれたテキスト——ビットマップとして描かれたタイトル画面やメニューボタン——は、スクリプトのテキストではなくピクセルです。それについては画像テキスト翻訳を参照してください。
- 正確なアーカイブやスクリプトの種別はリリースごとに異なることがあります。必ずお手元の特定のコピーで検証してください。
できたばかりです——壊れたら教えてください
はっきり繰り返しておきます。YU-RIS対応は新しく加わったものであり、多くの実ゲームではまだテストされていません。.ypfリーダー、YSTBパーサー、キー復元は作られてユニットテスト済みですが、このエンジンにはスタジオごとの長年の差異があり、その全部を私たちが見たわけではありません。ですので、RuneTranslateをYU-RISゲームに向けて、検出されない、アーカイブが開かない、何も抽出されない、あるいはゲームが読み込めないものが書き出される場合は、当社のDiscordで報告してください——ゲームの名前とパッケージ形式こそが、私たちが最速で堅牢化するのにまさに役立ちます。
RuneTranslateをダウンロードして、ずっと読みたかったあのYU-RISのビジュアルノベルに向けて、試してみてください。アーカイブベースの別のビジュアルノベルエンジンをどう扱っているか見たい方は、次にArtemisの手引きをお読みください。
RuneTranslate を試してみませんか?
無料プランですべてのエンジンとすべての翻訳プロバイダーが使えます。Supporter(月額 $3)ならフルスピードで翻訳できます。
Windows 版をダウンロード