【RPGツクールMV】【備忘録】制作失敗メモ(その3)

 自分が「RPGツクールMV」でゲーム制作をおこなった時の失敗メモ、第3弾は、昨日ちらっと申し上げていた、「Direct Input」方式のゲームパッドに対応するか否かという件です。

 「The Last Wizard」の制作時に、私は「Direct Input」方式のゲームパッドでプレイできるようにするためのプラグイン「use_DI_Joypad.js」をゲームに仕込んでいました。

 ところが、あいにく制作時には「Direct Input」方式のゲームパッドが手元になく 1)以前モンスターハンターフロンティアをプレイしていた時に使っていたものがあるはずなのだが、行方不明… 、ろくに動作確認しないままβテストを始めてしまったところで、テストプレイヤー様から戦闘中にゲームが中断されるというご指摘をいただきました。

 一見、「Direct Input」と何の関係もなさそうなのですが、またしても「Battle Engine Core」が相性問題を引き起こしてしまっていました。

 「use_DI_Joypad.js」と「Battle Engine Core」を両方有効にした状態で次の操作をすると、ゲームが止まってしまいます。

  1. 一度普通にゲームを起動する。
  2. キーボードのF5キーを押下してタイトル画面に戻る。
  3. その状態で任意のセーブデータを再開する 2)たぶんニューゲームでも発生?
  4. 敵と遭遇し、戦闘を開始する。なぜかアクターたちの姿が見えず、影だけになる。
  5. コマンド入力を終えて実行に移るタイミングで、「TypeError / Cannot read property ‘slice’ of null」という謎のエラーが発生し、ゲームが中断されてしまう。

 なお、制作時に私がこの現象を確認できなかったのは、「Direct Input」形式のゲームパッドがなかったということ以前に、そもそもF5キーでリセットするというオペレーションをとっていなかったのが理由でした。

 結局解決方法はずっとわからないままで、泣く泣く「use_DI_Joypad.js」の使用を中止しました。

 しかしこれは、昨日も申し上げておりますように、プレイヤー人口を大きく減らしてしまう愚行だったのです。


 本作では戦闘シーンに「Active Turn Battle」を採用したかったために、「Battle Engine Core」は絶対に外せない。かといって、発生条件がいくら限られているからといって、ゲームが途中で止まってしまうのは致命的である。

 しかし、この二つを解決するためにとった苦肉の策が、プレイヤー獲得という点ではある意味最も愚行だということに気づいたのは、自分が「Direct Input」方式のゲームパッドを入手して、実際にプレイを試みてからでした。

 はじめ、ソフトウェアで「Direct Input」を「XInput」に変換するものがあるのではないかと思った俺様は、「Xbox 360 Controller Emulator」を導入してみることにしました。しかし、残念ながらこれについては期待通りの動きをしませんでした。詳細については、また後日述べたいと思います。

 結局、再度「use_DI_Joypad.js」を組み込むことにしました。ただし、普通に組み込むのではまたF5リセット後に不具合が発生することはわかりきっています。そこで、試行錯誤の末、プラグインを改造することにしました。

 「use_DI_Joypad.js」の94行目を、次のように書き換えます。

 書き換え前。

90
91
92
93
94
95
96
//F5が押されていたらSceneBootに飛ぶ処理
SceneManager.onKeyF5 = function(){
    if(f5 == true){
        f5 = false;
        SceneManager.goto(Scene_Boot);    }
};

 書き換え後。

90
91
92
93
94
95
96
//F5が押されていたらSceneBootに飛ぶ処理
SceneManager.onKeyF5 = function(){
    if(f5 == true){
        f5 = false;
        SceneManager.goto(Scene_Title);    }
};

 とりあえずこれで、F5リセット後の戦闘突入時にもゲームが止まることはなくなりました。

 しかし、これはプラグイン作者様推奨の方法ではなく、こっちが試行錯誤の末に勝手に改造しただけですので、これで正解なのかどうかはっきり言って自信ありません。

 しかも、「RPGツクールMVのランタイムコードを読む – Sceneを理解する」という記事によれば、私がコードから削除した「Scene_Boot」は、システム画像やらデータベースやらといった重要な情報を読み込んだ後にタイトル画面に遷移するという挙動をとっており、普通どう考えても、単純にタイトル画面に遷移する「Scene_Title」よりも安全性が高そうに読めます。

 とりあえずしばらくの間は、改造した状態で様子を見たいと思いますが、同じことで悩んで同じような方法で解決したという方、他にいらっしゃいますかねえ?

プラグイン配布元
DirectInput方式のジョイパッドが使えるようになるプラグイン ツクマテ
参考記事
RPGツクールMVのランタイムコードを読む – Sceneを理解するryiwamotoのブログ
関連記事
Direct Input Gamepad
【RPGツクールMV】【備忘録】制作失敗メモ ( その1 | その2 )

このブログで関連すると思われる他の投稿:

00

References   [ + ]

1.以前モンスターハンターフロンティアをプレイしていた時に使っていたものがあるはずなのだが、行方不明…
2.たぶんニューゲームでも発生?
この記事はRPGツクール, Web, 私的メモに投稿されました タグ: , , , , , , , , , , , , , , , , , , , , . このパーマリンクをブックマークする。 Trackbacks are closed, but you can post a comment.

コメントを残す