RuneTranslate が Artemis エンジンのビジュアルノベルに対応
RuneTranslate が Artemis Engine のビジュアルノベル — VNDB に約 730 タイトルを擁する iMel/Mikage 製の Lua ベースエンジン — を英語と 30 以上の言語へ翻訳できるようになりました。純粋な TypeScript でエンジンの .pfs アーカイブを読み込み(PF8 の SHA-1 鍵ベース XOR 暗号化にも対応)、.ast(Lua テーブル)や .txt スクリプトから台詞・キャラクター名・選択肢を抽出し、インラインのルビ・ネームプレート・色指定コマンドを保持したまま、翻訳済みスクリプトをばら撒き形式で書き出すため、ゲームは再パックなしで読み込みます。追加されたばかりで多くの実ゲームでは未検証です — 開かないゲームがあればぜひ報告してください。
RuneTranslate は、これまでファン翻訳者にとってほぼ手の出せなかったエンジンをついに読み込めるようになりました。数百本の日本語タイトルを支えてきた Lua ベースのビジュアルノベルフレームワーク、Artemis Engine です。Artemis のゲームフォルダを開いたら .pfs アーカイブの山だけがあって読めるものが何もなく、諦めた経験があるなら——それがこのエンジンです。RuneTranslate は今やこれを検出し、それらのアーカイブを純粋な TypeScript で(暗号化も含めて)開き、スクリプトから台詞・キャラクター名・選択肢を読み出し、ゲームが自力で読み込む翻訳済みコピーを書き出します。RuneTranslate が対応する最新のエンジンです。
これはまったく新しいエンジンなので、正直なところから先にお伝えします。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)が存在し、翻訳者は周囲の構造を壊さずに実際の発話行を抜き出すために両方を理解しなければなりません。 - インラインのエンジンコマンドが台詞の中に織り込まれています。 ルビ/振り仮名の注釈、ネームプレート、色変更、クリック待ちがテキストとインラインで書かれています。それらを認識しない検索・置換はコマンドトークンまで翻訳してしまい、ゲームが壊れます。
正味の結果はこうです。日本語を流暢に読める翻訳者でさえ、まず独自の暗号化コンテナを展開し、次に 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 は翻訳済みの.ast/.txtスクリプトを、元のアーカイブパスにバラで、ゲームの隣に書き込みます。再パックはありません——ゲームは固められた原本の代わりにあなたの翻訳をただ読み込みます。(私たちの 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 を起動し、New project をクリックして、Artemis のゲームディレクトリを指定します。エンジン検出は自動で走り——エンジンの .pfs アーカイブを見つけると、プロジェクトを Artemis として認識します。元のゲームフォルダは決して変更されません。
ステップ 2:スクリプトはどう読み込まれるか
RuneTranslate は .pfs アーカイブを開いてスクリプトを取り出し、進めながら復号とパースを行います:
- 暗号化された `PF8` アーカイブ ——
SHA-1鍵ベースの XOR 方式で自前で復号するため、別途アンパッカーを走らせることは一切ありません。 - 暗号化されていない `PF6` / 旧来の `PF2` アーカイブ ——直接読み込みます。
- `.ast` と `.txt` スクリプト ——台詞・名前・選択肢についてパースされ、ファイルごとにまとめてエディタに一覧されます。
インラインのエンジンコマンドと改行は、何かがプロバイダーに届く前に数値プレースホルダーの背後にマスクされ、出てくるときに復元されます——そのため、ルビの注釈、ネームプレート、色タグは往復を無傷で切り抜けます。
ステップ 3:翻訳する
プロバイダーを選んで実行します。ビジュアルノベルなら、キャラクターの声と語調には LLM(OpenAI / Anthropic)が最適で、地の文には DeepL が速くてきれいで、短いメニュー文字列や選択肢には無料の Google Translate で十分です。名前がゲーム全体で同一に表示されるよう、登場人物と頻出用語を前もって用語集にまとめておきましょう——Glossary 101 を参照してください。仕上がったら、AI リファイナー による任意のパスが各行を文脈の中で読み直し、機械翻訳が残しがちな硬く直訳的な言い回しを引き締めます。
ステップ 4:すぐ遊べるコピーを書き出す
Export をクリックします。RuneTranslate は、翻訳済みの .ast / .txt スクリプトを元のパスにバラで置き、手を付けていない .pfs アーカイブと並べた、ゲームの翻訳済みコピーを書き込みます。再パックはありません——Artemis は固められた原本よりバラのスクリプトを優先して読み込むため、ゲームはただあなたの翻訳を読みます。実行すれば、対象言語でプレイできます。
既知の制限
- コンパイル済みの `.asb` シナリオも読み込みます ——多くの Artemis ゲームは、読める
.ast/.txtではなく、コンパイル済みバイナリ AST(ASBマーカーで始まる形式)としてシナリオを出荷し、いくつかは拡張子をリネームしています(私たちがテストしたあるゲームは.ietを使用)。RuneTranslate はこれを拡張子ではなくシグネチャで検出し、その場で翻訳します。ゲームが話者名をスクリプト内テキストではなく画像やコマンド名として保存している場合、それらの名前はスクリプトではなく画像テキストのフローから来ます——名前が日本語のまま残るなら、たいていそれが理由です。 - バラファイルによる上書きが想定される読み込み経路であり、ほとんどの Artemis ゲームでは、エンジンが固められたコピーよりバラのスクリプトを優先するため機能します。それを尊重しない稀なタイトルでは、書き出しの調整が必要になることがあり——これはまさに、私たちがまだ確認中の実ゲーム挙動の類です。
- 画像アートに焼き込まれたテキスト ——ビットマップとして描かれたタイトル画面やメニューボタン——はスクリプトテキストではなくピクセルなので、スクリプト抽出器では届きません。それには 画像テキスト翻訳 を参照してください。
- 正確なアーカイブとスクリプトのバリアントはリリースごとに異なることがあります。必ずあなたの手元のコピーで検証してください。
できたてです——壊れたところを教えてください
はっきり繰り返しておきます。Artemis 対応は新規追加であり、多くの実ゲームではまだテストされていません。.pfs リーダー、暗号化、.ast / .txt パーサーは作成済みでユニットテストも通っていますが、このエンジンには私たちがすべて見たわけではない、スタジオごとの長年のばらつきがあります。ですので、RuneTranslate を Artemis ゲームに向けて、検出されない、アーカイブが開かない、何も抽出されない、あるいはゲームが読み込めないものを書き出す場合は、ぜひ私たちの Discord で報告してください——ゲーム名とパッケージのされ方(どの .pfs バリアントか、.ast か .txt か .asb か)こそが、私たちが最速で堅牢化するのに役立ちます。
RuneTranslate をダウンロードして、ずっと読みたかったあの Artemis の VN に向けて試してみてください。もう一つのアーカイブベースの VN エンジンをどう扱うか見たい方は、次に Kirikiri ウォークスルー をどうぞ。
RuneTranslate を試してみませんか?
無料プランですべてのエンジンとすべての翻訳プロバイダーが使えます。Supporter(月額 $3)ならフルスピードで翻訳できます。
Windows 版をダウンロード