Artemis エンジンのビジュアルノベルを英語に翻訳する方法
RuneTranslate は Artemis Engine(iMel/Mikage)のビジュアルノベルを英語と 30 以上の言語に翻訳します — .pfs アーカイブ(PF8 暗号化を含む)を読み、セリフと選択肢を抽出し、ゲームが読み込む root.pfs オーバーライドパッチをエクスポートします。ベストエフォート。
Artemis Engine のゲームを翻訳 するために、RuneTranslate はファン翻訳者にとって長らくほぼ手つかずだったフレームワークを読み取ります:Artemis Engine、数百の日本語リリースの背後にある Lua ベースのビジュアルノベルフレームワークです。Artemis のゲームフォルダを開くと、.pfs アーカイブの山があり、読めるものは何もありません。RuneTranslate はエンジンを検出し、それらのアーカイブを純粋な TypeScript で(暗号化も含めて)開き、スクリプトからセリフ、キャラクター名、選択肢を読み出し、ゲームが自力で読み込む翻訳済みコピーをエクスポートします。
Artemis にはスタジオごとの長年のばらつきがあるので、RuneTranslate を Artemis のゲームに向けて、検出しない、開かない、あるいはゲームが読み込めないものをエクスポートした場合は、教えてください — その方法は最後に。
Artemis Engine とは実際に何か
Artemis は、iMel Inc.(Mikage としても知られるスタジオ)が開発した商業日本語ビジュアルノベルエンジンです。Kirikiri や NScripter のような古いエンジンが独自のドメイン固有スクリプト言語を露出するのに対し、Artemis は Lua を中心に構築されています — そのシナリオスクリプトは本質的に Lua のデータテーブルです — これは開発者にとって柔軟ですが、実際には、完成したゲームを外部から翻訳しようとする者にとっては壁になります。VNDB の約 730 リリース がこれで作られているので、ニッチな珍品からは程遠く、機械翻訳ツールが歴史的に飛ばしてきた丸ごとのバックカタログです。
ディスク上では、Artemis のゲームは Windows の .exe と、スクリプト、アート、音声を保持する 1 つ以上の .pfs リソースアーカイブです。中のスクリプトはほとんどが .ast ファイル(Lua テーブルのシナリオスクリプト)と .txt ファイル(よりシンプルな行指向フォーマット)です。RuneTranslate はそれらのアーカイブとスクリプトから直接作業するので、スタジオがシナリオを .ast で出荷したか .txt で出荷したかにかかわらず、ゲームをカバーします。
なぜ Artemis ゲームは翻訳が難しかったのか
Ren’Py のようなソース駆動エンジンと比べると、Artemis はテキストをいくつもの層の背後に隠します。いくつかの具体的なものが、手作業の翻訳者と単純なツールの双方の手の届かないままにしてきました:
- すべてが `.pfs` アーカイブの中にある。 スクリプトはディスク上でルーズではなく — Artemis 独自の
.pfsコンテナフォーマットにパックされています(PF8、PF6、そしてレガシーのPF2バリアントが見られます)。そのフォーマットのリーダーがなければ、そもそも編集するものがありません。 - 最新のアーカイブは暗号化されている。 現行の
PF8フォーマットは、ファイルをパックするだけでなく、その内容を 暗号化 します:各エントリは、アーカイブ自身のインデックスのSHA-1ハッシュから導出されたキーに対して XOR されます。バイトを単純に切り出すことはできません — 読めるスクリプトを取り戻すには、エンジンのキー導出を再現する必要があります。 - スクリプトはプレーンテキストではなく Lua データ。
.astシナリオは Lua テーブルです — セリフ、話者名、選択肢は、エンジンコマンドと混ざった構造化テーブル内のネストされたフィールドです。世に 2 つのテーブルレイアウト(古い v1 と新しい v2)があり、翻訳者はその周りの構造を壊さずに実際の話し言葉を取り出すには両方を理解する必要があります。 - インラインのエンジンコマンドがセリフに織り込まれている。 ルビ/振り仮名の注記、ネームプレート、色変更、クリック待ちがテキストとインラインで書かれています。それらを認識しない find-and-replace はコマンドトークンも翻訳してしまい、ゲームが壊れます。
総合的な結果:日本語を流暢に読める翻訳者でさえ、まず専有の暗号化コンテナを展開し、次に Lua テーブルを手作業でパースし、それからインラインのマークアップを注意深く避けなければなりません — 1 行を翻訳する前に、です。それが RuneTranslate が今あなたの代わりに行う作業です。
RuneTranslate が今できること
RuneTranslate は Artemis を一級のエンジンとして扱い、パイプライン全体を純粋な TypeScript で処理します — 外部ツールなし、Python サイドカーなし、インストールするものなし:
- `.pfs` アーカイブを直接読む。
PF8、PF6、レガシーのPF2アーカイブフォーマットを内製で開きます。PF8 の `SHA-1` キー付き XOR 暗号化 を含め、エンジンのキー導出を再現するので、スクリプト内容が読める形で出てきます。 - セリフ、名前、選択肢を抽出する。 読める
.ast(Lua テーブル)シナリオスクリプト — 古い v1 と新しい v2 のレイアウト両方 — 、.txt(行指向)スクリプト、そして多くのゲームが実際に出荷する コンパイル済みバイナリ `ASB` シナリオ(署名で検出、.ietのようなカスタム拡張子にリネームされていても)をパースし、すべての翻訳可能な行をエディターに一覧します:話し言葉の セリフ、ネームプレート上の キャラクター名、分岐する 選択肢。 - エンジンコマンドを保持する。 インラインマークアップ — ルビ/振り仮名、ネームプレート、色、クリック待ち — と改行は、翻訳プロバイダーに届く前に数字プレースホルダーの背後にマスクされ、出力時に正確に復元されます。テキストは翻訳され、エンジンの指示は翻訳されません。
- オーバーライドパッチをエクスポートする。 Artemis はマウントされた
.pfsアーカイブからスクリプトを読むので、エクスポート時に RuneTranslate は翻訳済み オーバーライドパッチアーカイブ — ソースの.pfsごとに 1 つのroot.pfs.NNNファイル — をゲームのコピーに書き込みます。Artemis は最も番号の大きいアーカイブを最後にマウントしてそこから読むので、パッチはパックされた元のものを覆い隠し、ゲーム自身のアーカイブを再構築しません。(翻訳済みスクリプトは無害な追加物としてルーズにも書き出されます。)これは Kirikiri のパッチフロー と同じオーバーライドパッチの考え方です。
日本語 → 英語が最も得意 ですが、30 以上の言語 のいずれかをターゲットにできます — スペイン語、フランス語、ドイツ語、ポルトガル語、ロシア語、中国語、イタリア語、トルコ語、ベトナム語など。
必要なもの
- Windows 版 RuneTranslate — 無料。すべてのエンジンとプロバイダーが解放されています(無料ティアは機能ではなく速度がスロットルされます)。
- Artemis のゲームフォルダ。これはゲームの
.exeとその.pfsアーカイブ(スクリプトとアセットはその中にパックされています)があるディレクトリです。 - ターゲット言語 — 英語、スペイン語、フランス語、ドイツ語、ポルトガル語、ロシア語、中国語、イタリア語、トルコ語、ベトナム語、その他 20 以上。
- 1 つの翻訳プロバイダー。無料の Google Translate はそのまま使えます。DeepL には無料ティアがあります。OpenAI、Anthropic、ローカルモデル(Ollama / LM Studio)、あらゆる OpenAI 互換 API は自分のキーを用意するタイプです。Artemis のゲームはセリフが多くトーンに敏感なので、たいてい LLM(OpenAI / Anthropic)または DeepL が最もよく読めます。
ステップ 1: ゲームフォルダを開く
RuneTranslate を起動し、新規プロジェクト をクリックして、Artemis のゲームディレクトリに向けます。エンジン検出は自動的に実行されます — エンジンの .pfs アーカイブを見つけると、プロジェクトを Artemis と認識します。元のゲームフォルダは決して変更されません。
ステップ 2: スクリプトがどう読まれるか
RuneTranslate は .pfs アーカイブを開き、進めながら復号とパースをしてスクリプトを取り出します:
- 暗号化された `PF8` アーカイブ —
SHA-1キー付き XOR スキームを使って内製で復号されるので、別のアンパッカーを走らせることはありません。 - 暗号化されていない `PF6` / レガシー `PF2` アーカイブ — 直接読まれます。
- `.ast` と `.txt` スクリプト — セリフ、名前、選択肢がパースされ、ファイルごとにグループ化してエディターに一覧されます。
インラインのエンジンコマンドと改行は、プロバイダーに届く前に数字プレースホルダーの背後にマスクされ、出力時に復元されます — なのでルビの注記、ネームプレート、色タグは往復を無傷で生き延びます。
ステップ 3: 翻訳
プロバイダーを選んで実行します。ビジュアルノベルには、LLM(OpenAI / Anthropic) がキャラクターの声とトーンに最適で、DeepL はナレーションを高速かつクリーンに、無料の Google Translate は短いメニュー文字列や選択肢に十分です。名前がゲーム全体で同一に表示されるよう、キャストと繰り返し出る用語を事前に用語集化しましょう — 用語集 101 を参照。完了したら、AI リファイナー で任意のパスを実行すると、各行を文脈の中で読み直し、機械翻訳が残しがちな堅く直訳的な言い回しを引き締めます。
ステップ 4: すぐ実行できるコピーをエクスポート
エクスポート をクリックします。RuneTranslate は、Artemis が最後にマウントしてパックされた元のものより優先して読む root.pfs.NNN オーバーライドパッチアーカイブ — ソースの .pfs ごとに 1 つ — を持つゲームの翻訳済みコピーを書き出します。(翻訳済みスクリプトは無害な追加物としてルーズにも置かれます。)実行すれば、ゲームはターゲット言語でプレイできます。
既知の制限
- コンパイル済み `.asb` シナリオは読まれます — 多くの Artemis ゲームは、読める
.ast/.txtの代わりに、シナリオをコンパイル済みバイナリ AST(ASBマーカーで始まる形式)として出荷し、いくつかは拡張子をリネームしています(私たちがテストしたあるゲームは.ietを使います)。RuneTranslate はそれを拡張子ではなく署名で検出し、その場で翻訳します。ゲームが 話者名 をスクリプト内テキストではなくグラフィックやコマンド名として格納している場合、それらの名前はスクリプトではなく画像テキストのフローから来ます — 名前が日本語のまま残る場合、たいていそれが理由です。 - オーバーライドパッチが読み込みパスです。 翻訳済みの
root.pfs.NNNアーカイブが、ゲームが実際に読むものです。アーカイブを異なる方法でマウントする稀なタイトルでは、エクスポートに調整が必要かもしれません — まさに私たちが報告を受けて堅牢化していく種類の実ゲーム挙動です。 - 画像アートに焼き込まれたテキスト — ビットマップとして描かれたタイトル画面やメニューボタン — はスクリプトテキストではなくピクセルなので、スクリプト抽出では届きません。それには 画像テキスト翻訳 を参照してください。
- 正確なアーカイブとスクリプトのバリアントはリリースごとに異なる場合があります。必ず自分の具体的なコピーで検証してください。
問題にぶつかった? 教えてください
.pfs リーダー、暗号化、.ast / .txt / .asb パーサーは構築され、ユニットテスト済みですが、Artemis にはスタジオごとの長年のばらつきがあります。ゲームが検出しない、アーカイブを開かない、何も抽出しない、あるいは読み込めないものをエクスポートした場合は、Discord で報告してください — ゲーム名とパッケージ方法(どの .pfs バリアントか、.ast か .txt か .asb か)こそが、私たちが最速で堅牢化するのに役立ちます。
RuneTranslate をダウンロードし、ずっと読みたかったあの Artemis VN に向けて、試してみてください。別のアーカイブベースの VN エンジンをどう扱うかを見るには、次に Kirikiri ウォークスルー を読んでください。
RuneTranslate を試してみませんか?
無料プランですべてのエンジンとすべての翻訳プロバイダーが使えます。Supporter(月額 $3)ならフルスピードで翻訳できます。
Windows 版をダウンロード
