RPGツクールMV作品などの動作
Last modified: 2021-03-26
作品の公開形式と動作
RPGツクール(RPG Maker) MV/MZ作品はNW.jsアプリケーションとして書き出される
作品の動作に必要なJavaScriptのスクリプトファイル群が作品の一部として含まれる
RPGツクールMV/MZ作品ではマルチバックエンド な描画ライブラリ “Pixi.js” を用いてRPGツクールMV/MZ作品を動かす
ラノゲツクールMV(Visual Novel Maker)作品もNW.jsアプリケーションとして書き出され、作品の動作に必要なスクリプトファイルが同様に含まれるが、Pixi.jsは使われていない
同ツールによる作品の動作については細かい部分でRPGツクールMV作品と異なる部分があるが、本記事ではRPGツクールMV作品を前提とする
製作者は作品をダウンロードして実行用プログラム(WindowsならGame.exe
)を動かす形とWebブラウザでゲームプレイ用のページにアクセスして遊ぶ形から公開形式を選べる
前者はOS依存のプログラムが同梱される形だが、NW.jsのバイナリが提供されているOSからはネイティブのNW.jsを用いて遊べる
Windows用に公開されているRPGツクールMV作品では “Enigma Virtual Box” というソフトウェアでコンテンツが書庫にまとめられているケースがあり、ネイティブのNW.jsで直接実行はできないが、展開用ソフトウェアで中身を取り出して元のレイアウトにファイルを配置すればそのような作品も遊べる
前者のセーブデータは作品のディレクトリのwww/save/
以下にファイルとして保存される
後者はWebブラウザがあるOSであれば環境を意識せずに遊べるが、その都度ロード時間が発生して快適ではないという問題があるのに加え、セーブデータはブラウザのローカルストレージに保存されるため、個別にファイルとして管理できないという不便な点がある
NW.jsは内部でChromiumのコードを用いており、後者で使用するWebブラウザはChromium/Chrome系が速度面で好ましい
NW.jsをRPGツクールMV作品などのプレイに使用する場合、使用するのはSDK版よりもサイズの小さい通常版で問題ない。
Linux上のNW.jsでRPGツクールMV作品を動かす際のPCスペックについては、過去にAthlon II X3 445(K10世代CPU)とRadeon HD 4200(オンボードGPU)の環境では作品やシーンによっては少し止まるようなことがあって微妙だったが、G4400(Skylake世代2C2TCPU)とHD510(内蔵GPUの下位モデル)および220GE(ZEN1世代2C4TCPU)とVega3(内蔵GPUの下位モデル)では快適に動いている。
NW.jsでの実行
NW.jsの実行ファイルnw
に、package.json
を含んだ作品ディレクトリを指定して実行する
実行時の作業ディレクトリは作品のディレクトリでなくてもよい
(通常の実行)
$ /path/to/nwjs/nw --ignore-gpu-blacklist /path/to/game_dir
(Waylandネイティブでの実行・バージョン0.50以上必須)
$ /path/to/nwjs/nw --ignore-gpu-blacklist --enable-features=UseOzonePlatform --ozone-platform=wayland /path/to/game_dir
過去のRadeon HD 4200使用時、--ignore-gpu-blacklist
オプションを付けないとWebGLやハードウェアアクセラレーション付きのCanvasが使えなかったことがある
--ignore-gpu-blacklist
オプションは後に--ignore-gpu-blocklist
という名前(a
からo
に変更)になって置き換えられているため、使用しているNW.jsのリリース時期が古くなければ--ignore-gpu-blocklist
の指定が必要となる
NW.js 0.28からSpectre用の緩和策として--js-flags=--untrusted_code_mitigations
オプションが用意されたが、大幅な速度低下の原因となることや、ツクール作品が信頼できるコードと見なせると考えられることから、実際には必要ないと考えられる
NW.js 0.50からChromium部分(バージョン87)がWaylandに対応したため、--enable-features=UseOzonePlatform --ozone-platform=wayland
オプションを付けるとWayland環境でネイティブに動作するが、0.50系時点では全画面でないときにも装飾が描画されない(全画面にすると気になりにくくなる)
全画面(フルスクリーン)表示
起動後にF4
を押すことで、動作中に全画面表示の切り替えができる
package.json
のwindow
にfullscreen
を有効にする記述を追加すると起動時にフルスクリーンになる(NW.jsの仕様)
{
// ...
"window" : {
// ...
// Start in fullscreen mode
"fullscreen" : true ,
"icon" : "www/icon/icon.png"
}
}
起動時にフルスクリーンに切り替わるNW.jsアプリケーションではこれが記述されているため、ウィンドウモードで実行したい場合はこれをfalse
に書き換えるなどする。
NW.js使用時に削除可能なファイル
以下のファイルはNW.jsで実行する場合には削除しても動作に影響はなく、使用ディスク領域を削減できる。
Game.exe
(Windows用の場合のファイル名)
*.bin
*.dat
*.dll
(Windows用の場合の拡張子)
*.pak
LinuxなどでNW.jsを用いて作品を動かす際に出くわす問題
ファイル名の大文字/小文字の区別による問題
Windows上で製作された作品をLinuxなどの大文字/小文字の区別のある環境でプレイすると、作品内の指定とローカルディスク上の素材ファイルなどのファイル名の大文字/小文字の違いが原因でファイルが見つからないエラーメッセージが表示されて動作が停止してしまう事例がたまにある
存在が要求されるファイル名はJavaScriptコード内で動的に生成されていたりすることもあるので、イベントのデータなどのファイルを外部のプログラムで読み込んで要求されるファイル名の一覧を生成して実際に存在するファイルの一覧と照らし合わせるという形のチェックはできず、実際にプレイしてエラーが出るかどうかを調べるしかない
要求されているファイルの名前をいじらずに問題を回避するにはciopfs を使用してマウントポイント以下に作品を配置して動かすのが楽
問題の発生した作品で実際に試して正常に動作することを確認済み
ごくわずかな処理コスト(追加のCPU資源の使用)が発生すると考えられるが、大量のファイルを頻繁に読み込むわけではないため、CPUスペックが極端に低い場合以外は気にする必要はなさそう
WineでWindows用のGame.exe
を実行した場合、Wine上でのファイル名の大文字/小文字の区別がされないことによりこの問題は起こらない。
セーブデータや設定が保存できない
RPGツクールMV初期の発売後の初期(2015-2016頃)に書き出されたJavaScriptスクリプトを含む作品では、NW.jsで実行するとセーブデータや設定の書き込みに失敗することがある
www/js/rpg_managers.js
のStorageManager.localFileDirectoryPath = function() {
の後ろの関数部分を別の新しい作品の同ファイルのこの関数の中身で置き換えると正常に動作するようになる
変更の際には元に戻せるように変更前のファイルをコピーしておく
メモリ使用量の問題
2016年頃までの作品ではWebGL使用時にメモリが解放されずにメモリ使用量が増え続ける問題があり、WebGLを無効化することでCanvasが代わりに使用されてメモリ使用量が増えにくくなる
その後のアップデートが適用された作品では、WebGLのメモリ解放の問題が改善された一方、WebGL必須になってCanvasモードを選択できなくなってしまった
Windows版の実行ファイルをWineで実行
画面が真っ黒になる場合は回避策が必要
--ignore-gpu-blacklist --use-gl=desktop
オプションを指定して起動すると動作
前述の通り、--ignore-gpu-blacklist
は後に--ignore-gpu-blocklist
に置き換わっているため、作品のリリース時期などによって使い分ける
winecfg
などでOSバージョンを “Windows XP” に設定して実行すると起動オプションなしで動くものもある
作品によっては、WaylandセッションのXWaylandで動かすと非常に低速になる現象を手元の環境で確認しており、回避するにはX11セッション内で実行する必要がある
Enigma Virtual Box使用作品は6.0時点では中身を展開せずに起動可能
過去にプログラム自体が落ちる問題があったが、これは改善された
Wine 6.0-rc4時点では特定の作品の特定の場面で時々動作が固まることを確認しているので、セーブはこまめに行う
動作確認済みのRPGツクールMV作品
クチダケ (プレイ時のバージョンは不明)
ハッピーチョコミント! (バージョン不明)
WebGL使用時にはメニューの開閉などでメモリ使用量がどんどん増え、環境によってはメモリ不足になる可能性があるため、Canvasでのプレイが無難
NW.jsを用いてエンディングまで動作することは確認済み
AliasAche 2.30
Enigma Virtual Boxが使用されている
巨大なexeファイルに対して展開ツールを使用した上で、NW.jsにてエンディングまで安定動作
Wine 6.0時点では巨大なexeファイルを起動できるが、手元の環境ではフリーズが繰り返し発生したため、通しプレイは難しいかもしれない
ビギニングクエスト 〜ベクセリアワールド物語〜 1.02
東京パンドラゲート 1.03
そのままではセーブに失敗するため、www/js/rpg_managers.js
の変更が必要
www/audio/se/
以下のファイル名を下のように変更するか、またはciopfs
を使用しないと序盤の特定箇所で突然動作停止する
Skill3.ogg
-> skill3.ogg
Wind6.ogg
-> wind6.ogg
手元の環境ではwww/audio/se/
ディレクトリ内でfor f in *.ogg; do ln -s "$f" "$(echo "$f" | tr "[:upper:]" "[:lower:]")"; done
を実行して小文字のみの名前のシンボリックリンクを全ファイルに対して作成し、この状態でNW.jsにてエンディングまで動作を確認したが、ciopfs
のほうが楽と思われる
Memorial Story 1.19
NW.jsにてエンディングまで安定動作
本編クリア後の追加ダンジョンクリアまで確認したが、敵一覧は未コンプリート