【解決済】バトル中の振動。

トリアコンタン

モデレーター
スタッフ
モデレーター
こんにちは!
試作してみましたので動作をご確認ください。

「ダメージ時の振動プラグイン」
戦闘でアクターがダメージを受けたときに画面を振動させます。
クリティカル時と通常時とで強さを変えることができます。

・ダウンロード
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/ShakeOnDamage.js

・ライセンス(MITライセンス)
  • 製作者: トリアコンタン
  • 非商用利用: 自由
  • 商用利用: 自由
  • 再配布: OK
  • 加工: OK
  • 加工後の再配布: OK
  • シリーズ: ツクールMV以外でも使用可能ですがMVでの動作を前提に作成しています。
 
>パンダさん
すごくいいアイディアありがとうございます! 私も使わせていただきます。

>トリアコンタンさん
すごくいいプラグインをありがとうございます!
これでフロントビュー戦闘の臨場感が格段に上がりました! まるでドラクエ初代みたいな臨場感です!!

テストプレイしたところ、揺れの時間や速さは開発者の好みに1つに設定するのでいいと思ったのですが、
揺れの強さは、「ダメージを受けた後のそのキャラのHP割合」によってダイナミックに変わるほうが、より臨場感が増すと思いました。
例えば、初代ドラクエ1では、主人公のHPが少なくなるほど、ウィンドウの白の文字をオレンジや赤にしたり、
HP0になるときの一撃はすごい揺れを起こすなど、ファミコンながら演出に凝っています。

そこで、もし可能であればなのですが、痛恨時だけでなく、普通時も、
「残りHP%(ダメージを受けた後、被ダメージキャラの最大HPの何パーセント、HPが残っているか)」で
揺れの強さを変えることはできますでしょうか?

例えば、プラグインに、配列数が10個の以下のパラメータを設定します。
___________________[0], [1], [2], [3],[4],[5],[6],[7],[8],[9]
・揺れの強さ0から9の残りHP%範囲: "90, -1, 75, 60, -1, 50, 40, 25, 10, 0"
こうすると、以下のようになるようにします。
[0]: ダメージを受けた後、残りHPが【90】%以上だと揺れない
[1]: 揺れの強さ1は使われない(【-1】と記入されているため)
[2]: ダメージを受けた後、残りHPが【75】%以上90%未満だと揺れの強さは2
[3]: ダメージを受けた後、残りHPが【60】%以上75%未満だと揺れの強さは3
[4]: 揺れの強さ4は使われない(【-1】と記入されているため)
[5]: ダメージを受けた後、残りHPが【50】%以上60%未満だと揺れの強さは5
[6]: ダメージを受けた後、残りHPが【40】%以上50%未満だと揺れの強さは6
[7]: ダメージを受けた後、残りHPが【25】%以上40%未満だと揺れの強さは7
[8]: ダメージを受けた後、残りHPが【10】%以上25%未満だと揺れの強さは8
[9]: ダメージを受けた後、残りHPが【 0】%以上10%未満だと揺れの強さは9

実装方法はあくまでも例です。作りやすいように、どのようにしていただいて構いません。
パラメータ数が膨大になるのを防ぐために配列にしてみましたが、わかりにくいようなら9~18個並べていただいてもかまいません。

なお、もし残りHPを取るのが難しければ、最大値と最小値を指定した、ランダムでも構いません。
それだけ、バリエーションがあるほうが楽しいと思いました。
ただ、最大HPがインフレしたときに、揺れのバリエーションがなくなるのを避けるため、
「ダメージ数による分岐」は避けたほうがいいかもしれません。
(グラフィカルなダメージエフェクトなどだと別の意味でそういう需要もあるかもしれませんが、揺れに関しては不適切かもです。念のため)

なお、痛恨時の揺れの強さは、残りHPで判定したものとどちらを優先するか、ON/OFFオプションがあるといいかもしれません。
あと、フロントビューでは痛恨事にアニメーションを挿入することができない(他プラグインでも無理)だったのですが、
もしできるのであれば、痛恨事にパラメータで指定した特定のアニメーションIDを再生、などのオプションが追加できると、
痛恨事は揺れだけでなく、更に画面エフェクトが簡単にカスタマイズ出来て、
とても汎用性の溢れるプラグインになるかもしれません。

いろいろ要望を言ってしまいすみません。とてもいいプラグインだったので、いろいろ発想が膨らんでしまいました…><。
もちろん、お暇なときで結構ですので、もしよろしければご検討いただけると幸いです。
 
最後に編集:

トリアコンタン

モデレーター
スタッフ
モデレーター
こんばんは!
様々なご要望に柔軟に対応する方法として、振動強さに計算式を適用可能にする方法があります。
ご要望を正確に反映する場合、指定する計算式がやや長くなってしまいますが、その方向でいいでしょうか?
(計算式のサンプルは用意します)
 
>トリアコンタンさん
ありがとうございます! 計算式、アリだと思います。 問題ないです。
evalを使う方法だともしかすると連続ダメージ時に遅延が発生してしまうかもですが、
ダメージ時なので、ある程度の遅延ならユーザは(「演出かな?」と)許してくれるのではないかと思ってます。
(ダメージ1回あたり1~2回の計算なので、そんなに遅くはならないと思いますが、ちゃんとテストしてみます)

ただ計算速度的にパンダさんのものと互換性がなくなると思うので、前のバージョンのものとは別で配布していただけると助かります。
(追記: DynamicBattlerParameter.jsのように、(i)パラメータの計算式が空白""ならデフォルト、(ii)数値1-9なら普通にその数字を使用、(iii)それ以外ならevalを使う、という分岐をすれば、互換性を保てるかもしれません。その場合は更新で大丈夫です)
 
最後に編集:

トリアコンタン

モデレーター
スタッフ
モデレーター
こんにちは!
ご要望の機能を追加しました。
現在のHP倍率によって分岐するためには、シェイク強さに以下のように記述します。

PHP:
r >= 90 ? 0 : r >= 75 ? 2 : r >= 60 ? 3 : r >= 50 ? 5 : r >= 40 ? 6 : r >= 25 ? 7 : r >= 10 ? 8 : 9
パラメータに計算式を使用できる機能を追加(ver1.1.0)
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/ShakeOnDamage.js

パラメータが純粋な数値の場合はevalは実行しません。
なおevalを実行すること自体による処理速度の低下ですが、毎フレーム大量に発行しない限りは体感で分かるほどの違いはでないという認識です。
(イベントコマンドの「スクリプト」も内部でevalを使用しているくらいなので)
 
>トリアコンタンさん
お疲れ様です。いつもトリアコンタンさんのプラグインでは大変お世話になっています。

ツクールエディタv1.6.1 & コアスクリプトv1.6.1 &Windows10PCテストプレイの環境にて、以下の症状に出くわしました。

【症状】
・戦闘スピードがカクカク(いわゆる、フレームレートが安定しない状態)
・戦闘メッセージが時々、遅延する。具体的には、かなりギクシャクしていて、各行動毎に不自然に0.2~1.2秒ほど待たされたり、表示されるはずのメッセージが表示されない場合もある
・画面のシェイクも、起こるときと起こらない時があり、戦闘がギクシャクしていて、ストレスになる

【対策】
何かの処理が遅延しているようだったので、原因を調査したところ、
このプラグイン ShakeOnDamage.jsをOFFにすると、きれいさっぱりなくなりました。
つまり、このプラグインによる、大きな画面遅延だったようです。

【原因】
プラグインの計算式の処理量が原因かどうかを調べるため、プラグインパラメータ「シェイクの強さ」を9にしてみましたが、
遅延は発生しませんでした。
その代わり、連続攻撃時のシェイクは、時々途切れるようでした(後述します)。
このことから、「シェイクの強さ」に入れた計算式が原因と考えられます。
なお、遅延した場合に入れていた式は、以下の式でした。
「r >= 90 ? 0 : r >= 75 ? 2 : r >= 60 ? 3 : r >= 50 ? 5 : r >= 40 ? 6 : r >= 25 ? 7 : r >= 10 ? 8 : 9」
1c8083437692be0712f2aa18cba2b83e.png

また、「シェイクの強さ」を一定にした場合でも、
敵から連続攻撃を受けた際、9のシェイクを短時間で行うためか、シェイクしないときとシェイクする時があり、
描画処理がうまくいっておらず、時々ですが、画面遅延に繋がることが確認できました。
さらに、シェイク時にスキップボタンを押して、戦闘をスキップしてみましたが、少しスキップスピードに挙動の変化が見られました。
具体的には、シェイクした時のメッセージや内容が、極端にスキップされるような、一定のスピードを保てない、不自然なスキップになってしまうように感じました。
このことからも、計算式だけでなく、画面シェイクの描画負荷が、ゲームに遅延やストレスを与えることがあるようです。

【結論】
ゲームの快適性を重視すると、このプラグインは、動作環境においては過度なストレスと与えてしまう可能性があるため、
一旦使用を停止することにします。

なお、ゲームの遅延だけでなく、画面の揺れの動的変更は、あまりいい評判を聞かない
(「画面の揺れの変化によるインタラクションは、いわゆる画面酔いを起しやすく、一部の人に過度なストレスを与えるため、万人にとってふさわしいとは言えない」との研究報告があった気がします。出展がどこだったかは忘れましたが……すみません)もあるので、
一旦様子を観たほうがいいかもしれないです。
私もだんだん、揺れの実験をしていると、きぶんがわるくなってしまうことがあったので、もしかするとあまり良くないのかも……><と思い、
画面シェイクは明らめることにしました。

(余談ですが、1秒間に数回フラッシュさせたことで病院送りの子どもを増やしたポケモンショックと同様、ファミコン版ドラクエでの画面揺れは、そういう症状が報告される前に作られたものなので、これらの点は考慮していなかったのだと思われます。SFC版ドラクエでは、この点を考慮して、揺れは一定のリズムを保つように変更されているようです。なお、最近のゲームでは、ダメージによる画面全体の揺れを採用しているゲームは、ほとんどありません。)

以上、このプラグインを使うことによる諸事情をまとめました。
あくまでも報告メインで、画面の揺れや遅延によるストレスを未然に警告したかっただけで、
プラグインの改善は結構です。要望を出したのは私なので……。
今回のことで、私も画面の揺れによるストレスや描画負荷など、いろいろと勉強になりました。
ですので、トリアコンタンさんには感謝の気持ちしかありません。

面白いプラグインをつくっていただき、ありがとうございました!
 
最後に編集:
参考程度に、画面の揺れに対するドラクエFC版の仕様を記載したURLを貼っておきます。
http://light37.web.fc2.com/dragon/dqseries/dssentou.htm
この記事にもあるように、揺れによるエフェクトを少なくしたのは、確かに惜しいのかもしれませんが、
ドラクエ開発者にとっては、より多くのプレイヤーに安全してプレイしてもらえるような配慮だったのかもしれませんよね。
私もプレイヤーの安全だけは配慮しようと思います。
 

トリアコンタン

モデレーター
スタッフ
モデレーター
こんばんは!
プラグインのご利用ありがとうございます。

念のためこちらで同様のパラメータで確認してみましたが、特に遅延等は確認できませんでした。。
PCのスペックや動作環境、競合等の他の要因が絡んでいるのかもしれませんが、一旦利用停止するとのことなので調査は保留とします。
画面効果については、ゲームとして演出以外にも健康状態にも配慮する必要がある等、選び方が難しいですね……!

何か進展や状況の変化などありましたらまたお気軽にご相談ください。
 
>トリアコンタンさん
ご丁寧に返信ありがとうございます!

遅延は発生しなかったのですね……。。お忙しい所、確認ありがとうございました。
やはり動作環境によるのかもしれません。
モバイル環境での遅延や、画面酔いなどの影響を考え、一旦このプラグインは使用しない方向で動いてます。
また何かわかれば報告しますー。
 

humanworld92

ユーザー
>トリアコンタンさん
お疲れ様です。色んなプラグインでお世話になっております。

こちらのプラグインで味方ではなく敵がダメージを受けた際にシェイクさせるように
また弱点(有効度の高い)の技がヒットした際にもシェイクの強弱ができるように追加していただけないでしょうか?
もしよろしければお願いします。
 

トリアコンタン

モデレーター
スタッフ
モデレーター
こちらのプラグインで味方ではなく敵がダメージを受けた際にシェイクさせるように
また弱点(有効度の高い)の技がヒットした際にもシェイクの強弱ができるように追加していただけないでしょうか?
こんにちは!
当該機能を追加しました。よろしければお試しください。

1.2.0 2019/05/02 敵キャラのダメージ時にもシェイクさせる機能、弱点攻撃時にシェイクさせる機能を追加
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/ShakeOnDamage.js
 

humanworld92

ユーザー
トップ