対応エンジン · YU-RIS
YU-RIS(raiL-soft 作)は、数百の同人・商業日本語ビジュアルノベルを支える長年の Windows スクリプトエンジンです。そのリソースは .ypf パッケージアーカイブに収められ、シナリオは YSTB スクリプト(ysbin.ypf 内の .ybn ファイル、ysbin/yst00000.ybn のような内部パス)にコンパイルされています。RuneTranslate は .ypf パッケージを純粋な TypeScript で読み取り — GARbro も外部ツールも不要 — エントリーを解凍して各アーカイブのファイル名キーを復元し、次にコンパイル済みの YSTB スクリプトを解析します:4 つのセクション(命令、引数記述子、文字列値、行番号)に分割し、スクリプトの 4 バイト XOR キーを記述子テーブルから自動復元するので、暗号化されたスクリプトがキー探しなしで開きます。そこから文字列テーブルから日本語のセリフを取り出し、すべての行をエディターに一覧する一方、エンジンのコマンドオペランド、変数名、アセットパスは既定で除外するので、スクリプトのロジックが比較対象にしている何かを誤って翻訳することはありません。エクスポート時には文字列テーブルを再構築し — 長くても短くても翻訳が収まるようすべてのオフセットをパッチ — 同じ XOR キーを再適用し、翻訳済みの .ybn をそのアーカイブパスにルーズに書き出します。YU-RIS ランタイムは .ypf にパックされた同じパスよりディスク上のルーズファイルを優先して読むため、ゲームは単にあなたの翻訳を読み込みます — 再パックはありません。このエンジンはまだ実ゲームでの検証を進めている段階なので、再配布の前にエクスポートしたビルドをテストしてください。
ビジュアルノベルは何千行にもわたる固定キャストと繰り返される用語に依存し、機械翻訳はヒロインの名前を3つの章で3通りに綴ります。キャラクター、地名、繰り返される用語を最初に用語集へ登録し、すべてのセリフで同一に表示されるようにしましょう。 用語集の基本 →
ゲームディレクトリ — ゲームの yu-ris.exe とその .ypf パッケージ(通常は pac/ サブフォルダー内、スクリプトは ysbin.ypf 内)を含むフォルダー — を RuneTranslate に指定します。すでに GARbro でゲームを展開している場合は、ルーズな ysbin/ フォルダー内の .ybn スクリプトも検出されます。エンジン検出は YU-RIS レイアウトを自動認識します;元のフォルダーは決して変更されません。
RuneTranslate は .ypf パッケージを純粋な TypeScript で開き、エントリーを解凍し、内部のコンパイル済み YSTB スクリプトを解析します。各スクリプトの 4 バイト XOR キーを引数記述子テーブルから自動復元し — キー探しは不要 — Shift-JIS の文字列テーブルをデコードし、すべての日本語行をスクリプトファイル別にグループ化してエディターに一覧します。エンジンのコマンドオペランド、変数名、アセットパスは表示されますが既定で除外され、ストーリーロジックはそのまま保たれます。
これらのゲームはセリフが多く口調に敏感なので、LLM(OpenAI GPT-4o / Anthropic Claude)や DeepL が最もよく読めます;無料の Google Translate やローカルモデル(Ollama / LM Studio)は短いメニュー文字列や選択肢をカバーし、OpenAI 互換プロバイダーを OpenRouter や NanoGPT に向けられます。オプションの AI リファイナーによる 2 回目のパスが逐語的な言い回しを引き締めます。
YU-RIS のメッセージテキストはバックスラッシュ制御コード(改行、色、ルビ)と角括弧タグをセリフに織り込みます。RuneTranslate はそのすべてを翻訳中は数値プレースホルダーとして凍結し、出力時に復元するので、翻訳された行は元と同じ書式と間合いを保ちます。
エクスポート時、RuneTranslate はゲームをコピーし、各翻訳済み YSTB スクリプトを再構築します — 任意の長さの翻訳が収まるよう文字列テーブルのオフセットをパッチし、同じ XOR キーを再適用 — その後、元のアーカイブパス(例:ysbin/yst00000.ybn)にルーズに書き出します。YU-RIS ランタイムは .ypf にパックされた同じパスよりルーズファイルを優先するため、ゲームは再パックなしで単にあなたの翻訳を読みます。エクスポートしたコピーを実行すると、あなたの言語でプレイできます。