RPGツクールMVにおけるユーザ目線（ツクラーさん・プレイヤーさん）で最適なゲーム速度を実現するプラグインについて

## この記事は何？
fftfanttさんが主催する、RPGツクールMVのAdvent Callender 2016の
１２月２１日の部で投稿させていただいてます。
http://www.adventar.org/calendars/1732
(作者: twitter @merusaia)

## 概要を１４０文字で述べよ
・ゲーム速度は、ツクラーさんが調整できたほうがいいと思うよ
・トリアコンタンさんのプラグインと合わせ技で、プレイヤーさんも調整できる機能を提供するよ
・プラグインやサンプルプロジェクトを公開したからぜひ使ってみてね

## はじめに　～「最適なゲーム速度」ってどう決めるの？～
RPGツクールMVのゲームのデフォルトでは、
決定ボタン長押しで、メッセージや戦闘を早送りすることが出来ます。
ですが、この機能が必要かどうかは、人によって意見が異なると思います。

ここでは、ユーザ視点に立って、速度について考えたいと思います。
ユーザ視点とは、大きく分けて、
(a)ゲームを遊ぶプレイヤー目線と、
(b)ツクールMVを使用してゲームを創るツクラー目線
があります。

(a)プレイヤー目線でいくと、
せっかちなプレイヤーさんは「早く終わらせたいから、もっと高速に早送りできたほうがいい」と言い、
ゆったりなプレイヤーさんは「戦闘が早すぎて何をやってるかわからない」と言うかもしれません。

(b)また、ツクラー目線でいくと、
レベル上げ重視なツクラーさんは「長く快適に遊んでほしいから、もっと高速にしたい」言い、
シナリオ重視なツクラーさんは「早送りするとゲームに臨場感がなくなるから止めて欲しい」と不満を言うかもしれません。

最適なゲーム速度とは、最適なゲームバランスと同じくらい、難しい問題です。
早すぎてもダメ、おそすぎてもダメ。
「結局、何が最適なの？」
「もっと簡単に、プレイヤーにとってちょうどいい速度を作れたら良いのに……。」
そんな経験をしたことはないでしょうか？

結論から言うと、「最適なゲーム速度」とは、人によってまちまちで、
ツクール開発部はもちろん、どんなUI設計者でも、最適な速度を決めることは難しいと思います。

なら、打開案として、「ゲーム毎に調整できるよう」にしたら、どうでしょう？
また、もっと踏み込んで、「プレイヤー毎にも調整できるように」したらどうでしょう？

「むずかしそう……」と思いましたか？
だいじょうぶ！　プラグインにしました！！

え？　「調整がめんどくさい……」？　
だいじょうぶ！　ぜんぶこっちでやっておきました！（ある程度は）

ええっ？　「どうせ早送りしても、ウェイトや制御文字「\\.」も「\\^」はすっ飛ばせないんだろう？」って？
だいじょうぶ！　出来るように、「スキップ機能」という新機能をツクりました！！

## 作成したプラグイン（minRPG_CustomizeGameSpeed.js）
以下、プラグインのヘルプからの抜粋です。
```js
 * 【主な機能】
 * このプラグインをONにすると、以下の機能が追加されます。
 * 
 * ・ゲームスピードの高速化
 *    → マップ移動・戦闘ログ・各種モーション・エンカウント速度など、
 *      ユーザがストレスになりそうな部分を極力少なくして、いい感じに快適にします。
 * 
 * ・スキップモードの追加
 *    → 全てのウェイトや制御文字「\.」や「\|」をすっ飛ばす機能。
 *      デフォルトではダッシュボタン「Shift」キーに割り当てています。
 *    → スキップ機能を無ししたり、他のボタンにしたい場合は、パラメータ
 *      「ダッシュボタンでスキップ可能か」をOFFにしてください。
 *      他には、決定ボタン(zキー)、キャンセルボタン(xキー)に対応しています。
 * 
 * 出来る限りプラグインの導入を簡単にするために、デフォルトのままでも、
 * 快適に遊べるようになっています。
 * もちろん、プラグインのパラメータを変更することで、自分好みに調整できます。
 * 
 * ・標準ゲームスピードの調整
 * ・早送りボタンのカスタマイズ・早送り倍率の調整
 * ・標準・早送り時の動的なスピードの調整
 * ・「\.」や「\|」のウェイトフレーム数の調整
```
徹底的にユーザ視点を追求し、初心者ツクラーさんにも使いやすいようにツクりました。
よろしければ使っていただけるとうれしいです。

## 使い方
以下からダウンロードし、ご自身のゲームプロジェクトフォルダの「js/plugin」直下においてください。
https://www.dropbox.com/s/v4jdj1yqn8emglg/minRPG_CustomizeGameSpeed.js?dl=1
（※2018年9月14日、最新版に更新しました。）

ツクールエディタで「プラグイン管理」画面を開き、下の方にあるこのプラグインを追加し、
ダブルクリックで、パラメータの編集画面を開きます。
![7d6c4251dab644098f8c63a7cdd4813e.gif](https://qiita-image-store.s3.amazonaws.com/0/139484/2328eed4-326b-5cf9-7b98-c88307540bf9.gif)
（キャプションが見にくい場合は、見出しのバーの境界線をドラッグすると、長さが変えられます）

## プレイヤーさんがゲームスピードを調整できるようにする、プラグイン連携技
以下、プラグインのヘルプからの抜粋です。
```js
 * 【トリアコンタンさんのプラグインとの合わせ技】
 * トリアコンタンさんのプラグイン CustomizeConfigItem.js と併用すると、
 * 以下の機能が使えます。
 * 
 * ・オプション項目に「ゲームスピード（1～9）」追加
 *    → プレイヤーがいつでもゲームスピードを変更できるようにします。
 *      速度を9段階に変更することで、各種速度を快適になるように自動調整します。
 *
 * 導入方法
 * (1)パラメータ「可変ゲームスピードを格納する変数番号」に「【変数番号X】」を記入
 * https://gyazo.com/278a250e3c4e65a5b40a3566e84cb30f
 * (2)下記のURLから CustomizeConfigItem.js をダウンロードし、プラグインに追加
 * http://triacontane.blogspot.jp/2016/01/blog-post.html
 * (3)パラメータ「数値項目1」に、「ゲームスピード:2:【変数番号X】:OFF:1:9:1」を記入し、
 *    他のパラメータの隠しフラグを全て「OFF」にする
 * https://gyazo.com/8d14177e35129a93a17ad4d97ad8759a
 * ※以下がめんどくさい or うまくいかない場合は、
 *   サンプルプロジェクトを以下からダウンロードして、参照してみてください。
 *   https://www.dropbox.com/s/27nsond56y8jch1/PluginDeki-ru1_3_3.zip?dl=1
```
(1)パラメータ「可変ゲームスピードを格納する変数番号」に「【変数番号X】」を記入
![278a250e3c4e65a5b40a3566e84cb30f.gif](https://qiita-image-store.s3.amazonaws.com/0/139484/c40e975a-b5e1-dec6-9409-61e858044f1c.gif)
ここでは「【変数番号X】」を「15」、つまり\V[15]としています。

(2)下記のURLから CustomizeConfigItem.js をダウンロードし、プラグインに追加
(3)パラメータ「数値項目1」に、「ゲームスピード:2:【変数番号X】:OFF:1:9:1」を記入し、
   他のパラメータの隠しフラグを全て「ON」にする
![8d14177e35129a93a17ad4d97ad8759a.gif](https://qiita-image-store.s3.amazonaws.com/0/139484/52b275f7-a280-94af-4d26-a1953575db95.gif)
ちょっとややこしいですか、こんな感じです。

晴れて、これをすると、昔のドラクエのように、
オプション項目で、プレイヤーさんが戦闘スピードを調整することができるようになります。
![ca3e722bfc9109d6d50c45ecb605b059.gif](https://qiita-image-store.s3.amazonaws.com/0/139484/81f4c0ab-f3ab-6e19-38a0-9dcd4118cfc7.gif)
なお、同じくトリアコンタンさんの、BattleOptionsプラグインを使えば、
戦闘中にもオプション項目が追加されます。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/BattleOptions.js
これで、「ボス敵は遅く、ザコ敵は瞬速で」など、プレイヤー視点で自由にスピードを調整できますね。

※2017/04/18　更新　ゲームスピード10（最速クラス）を追加しました。
・ゲームスピードを「10」に設定すると、
　常時スキップモードのようになり、全てのウェイトや制御文字「\.」や「\|」をすっ飛ばします。
　また、イベント命令「ウェイト〇フレーム」も、すべて「ウェイト1フレーム」に変換します。
　開発陣のテストプレイ時や、どうしても時間がないライトユーザさん向けの設定にどうぞ。

※以下がめんどくさい or うまくいかない場合は、
以下のサンプルのプロジェクトファイルを配布してますので、それを参照してください。

・「みんなで創るサンプルプロジェクト0」　制作期間: 2017/01～
　→　最小限にサイズを抑えた、プラグイン紹介プロジェクト第二弾です。
https://www.dropbox.com/s/lcykxncg4q7kkzs/MinRPGProject0_20170419.zip?dl=1

・「プラグインでき～る」　              制作期間: 2016/01～2016/12/21
　→　多くの機能を紹介する、プラグイン紹介プロジェクト第一弾です。
　   トリアコンタンさんのクロスセーブプラグイン、Trbさんのミニマップ、Yanaさんの連携スキルプラグインなどが、ゲーム感覚で体験できます。
https://www.dropbox.com/s/27nsond56y8jch1/PluginDeki-ru1_3_3.zip?dl=1
一ヶ月限定の高速アップロード版（2017/01/21まで）
http://fast-uploader.com/file/7037834770819/

## その他に出来ること
```js
 * 【その他の機能について】
 * この他にも、ユーザさんがゲームをより柔軟にコントロールできるように、
 * プラグインのパラメータをたくさん用意しています。
 * 「もっと調整したい」という人向けに、
 * 各種機能をONにすることで、デフォルトから変更できるようになっています。
 * 
 * ・パラメーター最大値限界突破（攻撃力などの限界値を999→99億などに設定可能）
 * ・戦闘エンカウント時に任意のスイッチをONにする
 * ・戦闘開始時に最後に戦闘した敵グループIDを任意の変数に格納する
 * ・戦闘開始時に任意のスイッチをONにする
 * ・戦闘終了時に任意のスイッチをONにする
 * ・戦闘逃走・中断時に任意のスイッチをONにする
 * ・かばう（制御フラグ：身代わり）の条件変更
 * ・かばう成功時にコモンイベントを呼び出す
```
元々Tachi.jsにあった機能を、競合しにくいように編集・機能拡張しています。
詳細は、プラグインのパラメータの説明文や、ヘルプを見てください。
たくさん書いています。
```js
 *  これらの機能は、他プラグインとの競合を避けるため、
 *  必要な機能だけを、パラメータでON／OFF出来るようになっています。
 *  また、他の方が改変して使いやすいよう、
 *  ソース内部に多くの日本語コメントを追加しています。
```
こういう作りにしておくと、巨大なプラグインでも、
パラメータのON/OFFで、出来る限り競合を避けることが出来ます。
（やり方は、トリアコンタンさんに教えてもらいました。ありがとうございました！）

## 謝辞
このプラグインは、徹底したユーザ視点のゲーム「Hero and Daughter」や
ツクールMVサンプルゲーム「SeaPirate」でおなじみの方も多い、
TachiさんのプラグインTachi.jsを改造したプラグインです。

自分のゲームに当てて、目に見えてゲームが快適になったことに筆者が感動し、
「このプラグインを当てればどんなゲームも快適になるかも！」という一心で、
あれこれ改良を重ね、競合しては対策し、競合しては対策し‥‥
途中で、何度も何度も挫折しそうになりならが、心折れず立ち上がりました＞＜。５０回位…。
ですが、多くの方に手助けをいただいたおかげで、勇気をもらい、
１年以上の歳月かけて、なんとか完成したプラグインです。

開発過程は、ツクマテで見れます。
http://tm.lucky-duet.com/viewtopic.php?f=49&t=1703
この場を借りまして、手助けいただいた多くの方に、お礼を申し上げます。

yamachanさん、やなつきさん、Trbさん、
トリアコンタンさん、マンカインドさん、T.Akatsukiさん、
その他、ツイッターで手助けいただいた方々、
本当にありがとうございました。
皆さまの助けがなければ、このプラグインは完成しませんでした。
重ねてお礼申し上げます。

## 競合について
このプラグインは出来る限り競合を避ける作りになっていますが、
他のプラグイン（特に戦闘描画系のプラグイン）と競合する可能性があります。
YanflyさんのYEP_BattleEngineCore.jsなど、戦闘システムを触っているプラグインと競合する可能性があります。
競合する場合は、このプラグインの各種パラメータ「機能:○○」をOFFにするか、
少し大変ですが、このプラグインの一部分を抜き出して、改変して使用してください。

なお、筆者はjavascript初心者で、かつプラグイン開発者でもないため、
競合や不具合を報告いただいても、すぐに対応できるかはわかりません……。
（しょうじきいって、javascriptの闇…通称JSフィールド触るの、もういや……です＞＜。）
なので、サポートはあまり期待しないていただけるとうれしいです。

※2018年9月14日現在、私の代わりに、このプラグインの保守を引き継いでくれる方を募集中です。
詳しくは、ツクールフォーラムを見てください。
https://forum.tkool.jp/index.php?threads/%EF%BC%88%E6%94%B9%E5%A4%89%E8%80%85%E5%8B%9F%E9%9B%86%E4%B8%AD%EF%BC%89%E6%88%A6%E9%97%98%E3%82%84%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%E7%AD%89%E3%81%AE%E3%82%B2%E3%83%BC%E3%83%A0%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%82%92%E8%87%AA%E7%94%B1%E3%81%AB%E8%AA%BF%E6%95%B4%E3%81%A7%E3%81%8D%E3%82%8B%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3.1241/

## ライセンスについて
このプラグインはMITライセンスです。
どなたでもお使いになれますし、好きに改造して使っていただいて構いません。
Tachiさんのご協力があってこそなので、著作表示は「Tachi」とだけお願いします。
なお、私が編集した箇所については、著作権は放棄しますので、
煮るなり焼くなり、好きにしてください。

このプラグインで、あなたのゲームが少しでも快適になれば、うれしいです。


ではでは～。
みなさま、楽しいツクールライフを*