RPG Maker(ツクール)ゲームを翻訳する方法
RPG Maker はテキストがそのままデータファイルに入っている、現存する中で最も翻訳しやすいエンジンです。手元のバージョンの見分け方、プレイ可能な翻訳済みビルドのエクスポート、そして制御文字を無傷に保つ方法を解説します。
日本語のインディーゲームを探しに行ったとき、最も出会いやすいエンジンが RPG Maker(ツクール)で、しかも翻訳のしやすさでも群を抜いています。ゲームのテキストは実行ファイルにコンパイルされておらず、ゲームの隣に出荷される普通の JSON ファイルや Ruby でシリアライズされたデータファイルの中にあります。RPG Maker の翻訳がそもそも成立するのはそのためであり、以下の手順の最後に手に入るのが、画面に何が出ているかを推測するオーバーレイではなく実際にプレイできるビルドである理由もそこにあります。
このガイドでは、手元の RPG Maker がどのバージョンなのかの見分け方、エクスポートの流れ、実際に何が翻訳されるのか、制御文字が機械翻訳を通しても生き延びる仕組み、そして 1 行がおかしく返ってきたときの対処を扱います。RuneTranslate を使うかどうかにかかわらず役に立つように書いています。
手元の RPG Maker はどのバージョンか
この質問をする人のほとんどは、自分が持っているのがどのバージョンなのか分かっていません。そしてバージョンによってできることが変わります。ゲームフォルダを開き、次のリストで最初に一致するものを探してください:
- `www/` フォルダがあり、その中に
www/data/*.jsonがある — RPG Maker MV。ゲームは nw.js アプリで、実行ファイルはたいていwww/の隣のGame.exeです。 www/がなく、.jsonを持つ `data/` フォルダが直接ある — RPG Maker MZ。MZ はすべてを 1 階層上に移しており、これが両者を最も速く見分ける方法です。- `Data/` に
.rxdata、.rvdata、.rvdata2がある — それぞれ RPG Maker XP、VX、VX Ace です。Data/が空に見える場合は、ルートにGame.rgssad、Game.rgss2a、Game.rgss3aがないか確認してください。同じデータが暗号化アーカイブに入っているだけです。 - ルートに `RPG_RT.exe` があり、
.lmtと.lmuファイルがある — RPG Maker 2000 または 2003。まったく別世代のエンジンです。 - 隣に
www/もdata/もない、数十〜数百 MB の.exe— おそらくデータが実行ファイルの中に詰め込まれた Enigma Virtual Box ビルドです。後述します。
MV と MZ は常に混同されるほど似ていますが、編集を始めると効いてくる部分で違います。MV と MZ の比較では、フォルダ構成、プラグインのフォーマット、メッセージウィンドウの違いを解説しています。
RPG Maker 2000 と 2003 のゲームテキストは対象外です。 RuneTranslate が読むのは セーブエディター経由の .lsd セーブファイルだけで、それ以外はありません。RPG_RT.exe のゲームのスクリプトを翻訳したいなら、適したツールは EasyRPG であってこちらではありません。1 時間かけて自分で気づくより、ここで引き返したほうがましです。
4 ステップの流れ
- 新規プロジェクトをゲームフォルダに向ける。
Game.exeがあるフォルダを選びます。エンジンは中身から検出されるので、MV か MZ かをドロップダウンで選ぶことはありません。検出結果が予想と食い違ったら、それ自体が情報として読む価値があります。 - プロバイダーとターゲット言語を選ぶ。 9 つのプロバイダーが使え、そのうち 3 つは API キーもアカウントも一切要りません。
- 翻訳する。 ランナーがユニットをバッチにまとめ、失敗はバックオフ付きで再試行し、ETA 付きの実際の進捗バーを表示します。実行中でも完了後でも、テーブル上の任意の行を編集できます。
- プレイ可能なビルドを、選んだフォルダにエクスポートする。 そこに出てくるのは、翻訳済みデータファイルが組み込まれた、完全で実行可能なゲームのコピーです。
元のゲームフォルダは決して変更されません。書き込みはすべて選んだ出力フォルダに向かうので、エクスポートに失敗してもディスク容量以外は何も失いません — 削除してもう一度エクスポートするだけです。元の言語のビルドをインストールしたまま、翻訳版と並べてプレイできるということでもあります。
RuneTranslate は Windows 10 と 11 で動作し、Linux と Steam Deck では Wine または Proton の下で動きます。初回起動時に無料の Patreon サインインが必要です。無料ティアはすべてのエンジンとすべてのプロバイダーを解放しています — 機能を有料の壁の向こうに置くのではなく、スループットをスロットルし、同時に保持できるプロジェクトを 1 つに制限する形です。
実際に翻訳されるもの
MV と MZ では、抽出器がすべてのマップファイルとすべてのイベントコマンドリストを歩き、プレイヤーに見えるテキストを生成するコマンドを取り出します:
- `401` 文章の表示 — セリフの行。RPG Maker のゲームではこれが大半を占めます。
- `405` スクロールする文章の表示 — オープニング、クレジット、手紙、状況説明のクロール。
- `102` 選択肢の表示 — 選択肢ウィンドウの項目。
When [choice]の分岐ラベルも同じ配列から描画されるので、選択肢を翻訳すれば両方が翻訳されます。 - `320` / `324` / `325` — 名前の変更、二つ名の変更、プロフィールの変更。物語の途中での正体の判明や変身に使われます。
- データベース —
Actors.json(名前、二つ名、プロフィール)、Classes.json、Skills.json(名前、説明、そしてmessage1/message2の戦闘メッセージ)、Items.json、Weapons.json、Armors.json、Enemies.json、States.json。 - `System.json` — ゲームタイトル、通貨単位、そして用語テーブル全体:エンジンが描画するすべてのメニューラベル、コマンド名、基本ステータスの文字列。
- `MapInfos.json` のマップ名と
CommonEvents.json— セリフを共通のハンドラーに通すゲームでは、コモンイベントが驚くほど多くのスクリプトを抱えています。 - `plugins.js` のプラグインパラメーター と、MZ のプラグインコマンド引数(コマンドコード
357)。現代の MV / MZ ゲームがメニューテキストを置いている場所は、ここが多いです。
イベントの注釈(108 とその継続行 408)は、エンジンがプレイヤーに表示しない開発者向けのメモなので、デフォルトで除外されます。削除されるわけではなく、チェックを入れれば取り込めるオプトインの行として表示されます — 一部のフキダシ / ポップアップメッセージ系プラグインは実際にそれを描画するからです。分類器がコード識別子やファイルパスと読んだものにも同じ扱いが適用されます:除外され、見えていて、元に戻せます。
制御文字と、それが翻訳を壊す理由
RPG Maker のセリフはプレーンテキストではありません。エンジンが描画時に展開する、インラインのエスケープコードを含んでいます:
\C[1]— 文字色をパレットのインデックス 1 に切り替える。\N[2]— アクター 2 の名前に置き換える。\V[3]— 変数 3 の値に置き換える。\G— 通貨単位。\I[123]— アイコン 123 をインラインで描画する。\.\|\!\{\}— 少し待つ、1 秒待つ、入力を待つ、フォントを大きくする、小さくする。
これらをそのまま機械翻訳に渡せば、壊れて返ってきます。Google 翻訳は順序を入れ替えます。小さなローカルモデルは括弧を落としたり、英字を小文字にしたり、ASCII の括弧を全角に置き換えたりします。LLM は時折 \C[1] を打ち間違いと判断して、親切に削除してくれます。ゲーム内での結果は、バックスラッシュがそのまま印字されるテキストボックス、途中で色が抜ける行、キャラクター名が入るはずの場所が空白になる行です。
RuneTranslate は、プロバイダーが文字列を見る前にすべてのコードを番号付きプレースホルダー — [[T0]]、[[T1]] — にマスクし、その後マッピングから復元します。復元は意図的に寛容です:片側の括弧が欠けて返ってきたもの、中に余分な空白が入ったもの、英字が小文字になったもの、括弧が全角になったものを受け付けます — 実際に 4 つとも起きるからです。コードが完全に消えてしまった場合は、黙って出力せずにそのユニットにフラグが立ちます。
同じ仕組みが、もう少し分かりにくい 2 つのケースもカバーします。RPG Maker は printf 形式の置換も使います — Terms やスキルの戦闘メッセージにある %1 と %2 で、%1の攻撃! では %1 がアクター名になります — これらもマスクされます。弱いプロバイダーはその位置に括弧のゴミを勝手に作り出すからです。また、多くのゲームは [名前] や [呼名] のような裸の角括弧トークンを実行時にプレイヤー名へ差し替える名前置換プラグインを積んでいます。それらもマスクされますが、通常の角括弧を含む文章には手を出さない程度に狭く限定されています。
\FFF[20] や \FH[ON] のような、プラグインが定義する複数文字のコードも同じパターンに一致するので、プラグインごとの設定なしで保護されます。
46 文字での折り返し
日本語は 1 文字あたりに詰め込める意味が英語よりずっと多いため、日本語では余裕をもってメッセージボックスに収まっていた行が、翻訳すると右端からはみ出します。しかも RPG Maker は折り返してくれません — ウィンドウの外にそのまま描画するだけで、はみ出した分は見えなくなります。文が半分欠けているとプレイヤーに言われるまで気づきません。
エクスポート時、401 と 405 コマンドのセリフは 1 行 46 文字で折り返されます。これは、デフォルトのフォントサイズでデフォルトのメッセージウィンドウが収められるおおよその量です。改行は単語の区切りに入り、ソースにもともとある改行は保持されるので、作者自身のページ送りや意図的な行分けは残ります。独自のメッセージシステムや小さめのフォントを使うゲームでは、別の数字が欲しくなるかもしれません。広いウィンドウに描画するゲームでは必要より早く折り返されるだけで、これは見た目の問題であって壊れているわけではありません。
暗号化された画像とアーカイブ
MV と MZ には、画像を .rpgmvp や .png_ にリネームし、ヘッダーに XOR をかけるアセット暗号化オプションがあります。RuneTranslate は標準の方式を前提にしません — PNG のシグネチャを既知平文、IHDR の CRC32 をチェックとして使い、ヘッダー長、XOR をかける長さ、キーをファイル自身のバイト列から 復元 します。これが効いてくるのは、異なるパラメーター(32 バイトのヘッダー、32 バイトの適用長、鏡像化されたキー)を使う暗号化プラグインが存在するからであり、System.json からキーが抜かれているゲームも珍しくないからです。RPG Maker 自身の方式は 1 回目の試行で検証が通るので、一般的なケースで遅くなることはありません。書き戻すものは 同じ 方式で再暗号化されるので、ゲーム自身の復号処理がそのまま読み込めます。
XP、VX、VX Ace では、.rgssad / .rgss2a / .rgss3a アーカイブを直接読み、中の Ruby Marshal データを TypeScript でパースします — Ruby のインストールも外部の展開ツールも不要です。ここでの対応はベストエフォートです:XP と VX のゲームはテキストをタグ付き UTF-8 ではなく Shift-JIS のバイト列として保持するため、MZ よりも文字コードの境界ケースが起きやすくなります。
アートワークに描き込まれたテキスト — タイトル画面、メニューボタン、CG の中の看板 — は、どのデータファイルにも入っておらず、どんな抽出器も届きません。それが Image Studio の役目です:テキスト領域を検出し、下地をきれいにし、置き換えの文字を組版し、暗号化も含めてゲーム自身の画像フォーマットに焼き戻します。
Enigma Virtual Box でパックされたゲーム
配布されている RPG Maker のゲームには、www/ も data/ フォルダもまったく見当たらないものが相当数あります。仮想ファイルシステム全体が Enigma Virtual Box で実行ファイルの中にパックされているからです。目印は、exe の中の EVB\0 マーカーと、妙に空っぽに見えるゲームフォルダです。
これらは検出され、扱えます。パックされたファイルシステムはプロジェクトごとのワークスペースに展開され、データは通常どおり抽出・翻訳され、エクスポート時には仮想ファイルシステム 全体 が実行可能なフォルダとして書き出されます — 復元された内側の実行ファイル、その DLL、そして www/ が、翻訳済みデータをパッチした状態で出てきます。起動するのは展開された内側の実行ファイルで、その時点ではルーズなデータファイルを読む普通のゲームです。
そうでなければ動きません。以前のやり方は、翻訳済みの www/ をパック済み実行ファイルの隣に置くというもので、これは黙って何もしませんでした:動作中のラッパーは www/ を自身の埋め込み仮想ファイルシステムから解決し、ディスク上のファイルを無視するからです。他のツールで手作業でこれをやっている人にとっては、ここが罠です — 翻訳が適用されたように見えて、ゲームは元のテキストを読み込み続けます。
どのプロバイダーを選ぶか
9 つのプロバイダーに対応していて、そのうち 3 つは API キーもどこかのアカウントも不要です:Google、無料の DeepL エンドポイント、そして Classic / Next-gen モデルを選べる DeepL です。誰にも支払わず、何にも登録せずに、RPG Maker のゲームを 1 本まるごと翻訳できます。有料の選択肢は、DeepL API、OpenAI、Anthropic Claude、DeepSeek、あらゆる OpenAI 互換エンドポイント、そして自分のマシンから何も出したくない場合の Ollama / LM Studio 経由のローカルモデルです。
RPG Maker に限った短い結論:無料のスクレイパーはメニュー、アイテム名、短い行には十分で、ほとんどの人はここから始めるべきです。弱いのは擬音語です — プロバイダーがソースをそのまま返した場合、そのユニットは注記付きで失敗として印が付き、ソース言語のテキストが黙ってエクスポートに紛れ込むことはありません。長いセリフ、トーン、話者の口調が効いてくるものでは、LLM のほうが目に見えて優れています。実際のトレードオフは プロバイダー比較に、仕上がった翻訳に 2 回目のパスをかけて整える話は AI リファイナーにあります。
名前の表記を揃える
機械翻訳された RPG Maker のゲームに対する最も多い不満は、主人公の呼び名が 4 通りある、というものです。用語集がこれを解決します — キャラクター、地名、アイテム、スキルについて、使いたい表記を実行前に固定しておけば、すべてのバッチがそれを使います。作り方は 用語集 101で解説しています。翻訳メモリも同じ方向に効きます:同一のソース文字列はプロジェクト全体で同一の翻訳になります。同じアイテム説明が店とメニューと宝箱イベントに現れるエンジンでは、これが効いてきます。
RPG Maker 特有の罠が 1 つあります。一部のプラグインは話者の 名前文字列 を完全一致で照合します — MZ の TRP Skit 系がよく知られた例です。Actors.json の名前だけを翻訳してプラグイン側のデータを放置すると、照合が黙って失敗し、立ち絵やスキットが発火しません。RuneTranslate はエクスポート時に両側を同期します。手作業で編集する場合は、RPG Maker の名前が表示テキストであると同時に検索キーでもありうることを覚えておいてください。
うまくいかないとき
1 行が元の言語のまま残っている
よくある原因は 3 つです。1 つ目は、そもそも抽出されていない場合 — 抽出器が歩かない場所、たとえば独自プラグイン専用のデータファイルや、画像に焼き込まれたテキストにあるケースです。2 つ目は、抽出されたが除外された場合 — 分類器が識別子と読んだためで、オプトインの行として探してチェックを入れてください。3 つ目は、プロバイダーがソースをそのまま返した場合で、これは失敗したユニットとして表示され、別のプロバイダーで再実行できます。アプリを更新する前にそのゲームを翻訳していた場合は、エディターの ⋯ メニューから ソースを再スキャン を使ってください — 再スキャンはユニットを追加するだけで、既存の翻訳を削除することはありません。
テキストがメッセージボックスからはみ出す
デフォルトの折り返しはデフォルトのウィンドウを想定しています。独自のメッセージシステム、大きめのフォント、ボックスの半分を占める立ち絵があるゲームでは、もっと短い行が必要です。該当のユニットを直接編集して、自分で改行を入れてください — 手動の改行はエクスポートを通して保持されます。翻訳が単に冗長すぎる場合の対処もこれで、折り返しと戦うのではなく短く書き直してください。
エクスポート後にゲームが起動しない
ほとんどの場合、テキストの問題ではなくデータファイルの破損です。起動したのが元のフォルダではなく 出力 フォルダの実行ファイルであることを確認してください。EVB ビルドの場合は、展開された内側の実行ファイルを起動しているか確認します。特定のイベントでクラッシュする場合、疑うべきは生き残らなかった制御文字です — そのユニットを開いて、ソースとコードを見比べてください。比較できる正常な基準を常に手元に残せるよう、元のゲームフォルダは触らずに置いておきましょう。
翻訳してはいけないプラグインの文字列がある
プラグインパラメーターは、表示テキストとスイッチ名、ファイルパス、キー割り当て、モードフラグを同じブロックの中に混ぜて持っています。コード識別子やパスと読めるものは自動的に除外されますが、日本語の単語を内部キーに使っているプラグインはすり抜けます。そういうユニットは除外に印を付ければ、エクスポート時にソース言語のまま残ります。プラグインのパラメーターが命名パターンを共有している場合は、正規表現フィルターでまとめて処理できます。
率直な制限
- RPG Maker 2000 / 2003 のゲームテキストは範囲外です。 セーブエディター経由のセーブファイルのみです。スクリプトには EasyRPG を使ってください。
- XP、VX、VX Ace はベストエフォートです。 アーカイブリーダーと Ruby Marshal パーサーは純粋な TypeScript で、動作はしますが、古い Shift-JIS の文字列処理は MV / MZ より荒い面です。
- 独自プラグインの JavaScript にコンパイルされたテキストは、データに見える場合にのみ届きます。 自前のロジックの中に文字列をハードコードしているプラグインは、手作業での編集になります。
- ネイティブに保護された MZ ビルド — データが JavaScript レイヤーより下で復号されるもの — は、暗号を解析するのではなく実行時キャプチャとオーバーレイの経路で扱います。動作しますが、ベストエフォートとして扱い、長い翻訳作業に取りかかる前にエクスポートを検証してください。
- ここに書いたことのどれも、ビルドを実際にプレイすることの代わりにはなりません。 抽出数と緑の進捗バーは証拠ではありません。エクスポートしたゲームを起動して、最初の 10 分を読んでください。
併せて知っておくと役に立つもの
Cheat Mode は RPG Maker のゲーム自身のスイッチ、変数、アイテムを読んで書き換えられるので、翻訳を確認したい終盤のイベントに最短で到達できます — 20 時間を再プレイせずにエクスポートを検証する方法として、ほとんどの人が使っているのはこれです。セーブエディターは MV / MZ、XP / VX / VX Ace、そして 2000 / 2003 の .lsd セーブを直接開けるので、詰まったプレイや消えた重要アイテムで進行が止まることもありません。
先に全体像を掴みたい場合は、エンジン一覧に対応する 17 フォーマットすべてが、RPG Maker エンジンページにフォーマットの詳細があります。エンジンに依存しない版のガイドは 汎用の翻訳ガイドです。準備ができたら、ダウンロードページにインストーラーがあります。
RuneTranslate を試してみませんか?
無料プランですべてのエンジンとすべての翻訳プロバイダーが使えます。Supporter(月額 $3)ならフルスピードで翻訳できます。
Windows 版をダウンロード
