開発日誌

プラグイン/スクリプト

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 戦闘画面のキャンセルボタンの位置を調整する

2023-11-18 00:00:49

戦闘画面におけるキャンセル(戻る)ボタンを非表示にしたり、ボタンの位置を調整したりすることのできるプラグインを作成しました。

キャンセルボタン自体がRPGツクールMZから登場したものなので、MZ専用のプラグインとなります。

RPGツクールMZでは、オプションの「タッチUI」をONにすると、画面上にメニューボタンやキャンセルボタンが表示され、キーボードやゲームパッド(コントローラー)以外の、マウス操作やタッチ操作でも快適なプレイができるユーザーインターフェイスが標準機能として搭載されました。

しかしながら、デフォルトの戦闘画面におけるキャンセルボタンは、一見すると中途半端な位置に配置されています。

▲右上の中途半端な位置にあるキャンセルボタン

これは一見すると違和感のある配置ですが、スキルやアイテムの選択中はヘルプウィンドウが上部に表示されるため、そのヘルプウィンドウのすぐ右下に配置されているのです。なので、そこまでおかしなレイアウトというわけではありません。

▲スキルやアイテムのヘルプウィンドウのすぐ右下にある

ただ、小型~中型程度の敵キャラならば問題ありませんが、大型の敵キャラを画面端まで出現させているような場合、このキャンセルボタンが敵キャラのグラフィックに被ってしまって、少々見映えが悪くなります。

▲大型の敵キャラだとボタンが被ってしまう

そこで、戦闘画面におけるキャンセルボタンを、指定した位置に表示したり、非表示にしたりできるプラグインを公開しました。

もとは公式のツクールWebフォーラムのスレッドで上がっていた要望に応えたものに、機能追加したプラグインです。

キャンセルボタンの位置は「ボタンを非表示」「コマンドの直上」「ボタン位置を指定」の3種類から選べます。

デフォルトは「コマンドの直上」で、これを選んだ場合、キャンセルボタンはアクターコマンドのすぐ上に表示されます。

▲「コマンドの直上」ではアクターコマンドのすぐ上に表示

この場合でも、小型の敵など画像によっては、敵キャラのグラフィックにキャンセルボタンが被ってしまいます。

ただ、被るといっても基本的に足下なのと、アクターコマンドのすぐ右上という配置なので、そこまで違和感はないのではないでしょうか。

▲小型の敵だとボタンが被ってしまうが、そこまで違和感はない

このほか、表示方法を「ボタンを非表示」にした場合は、キャンセルボタンが表示されなくなります。

ボタンが非表示になっても、マウスの右クリックや2本指タップでキャンセルの操作自体は可能です。ただ、右クリックはともかく、2本指タップは知らないとかなり難しく(MV時代からこの操作は評判が悪かった)、キャンセルボタンを隠す場合は、キャンセル自体が必要ない戦闘システム(自動戦闘メインなど)の時に限ることをお勧めします。

▲「ボタンを非表示」ではキャンセルボタンが表示されない

また、「ボタン位置を指定」にした場合は、ボタン左上のXY座標を指定して、任意の位置にキャンセルボタンを置くことができます。

座標は固定値で指定するため、一つの作品内で条件によって位置を変えたり、といったことはできません。

▲「ボタン位置を指定」でキャンセルボタンを自由に配置。邪魔w

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] ダメージが0なら追加効果も発動しない

2023-11-10 02:13:28

物理タイプのスキルでHPダメージが0だった場合は、スキルの追加効果も乗らないようにするプラグインを作成しました。

RPGツクールMV/MZ、どちらにも対応しています。

例えば毒の追加効果がある通常攻撃の場合、ツクールのデフォルトシステムでは、相手の防御力が高くて通常攻撃が通らなくても、毒の追加効果が発生します。

しかしこれは何となく直感に反しています。ダメージが0だった場合は、毒などの追加効果も付与されないでいてほしい気がします。

というわけで、スキルの命中タイプが「物理攻撃」で、かつダメージのタイプがHPに作用する(HPダメージ、HP回復、HP吸収)スキルの場合、ダメージが0であったら使用効果が付かないようにするプラグインを作成しました。

注意点としては、命中タイプが「物理攻撃」で、かつダメージのタイプがHP系のスキル全てに適用される点と、全ての使用効果に適用される点です。

スキル個別に、あるいは使用効果個別に、ダメージが0の場合に発動させるか否かを設定する機能はありません。

毒の効果は乗らないでほしいが、追加のコモンイベントは発動してほしいとか、毒攻撃や麻痺攻撃はダメージが0なら追加効果が発動しないでほしいが、足払いはダメージが0でもスタンしてほしい、とかいった個別の設定には対応していませんので、ご注意ください。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 画面外のイベントをカスタム移動させる

2023-11-07 22:15:24

表示画面範囲外のイベントでも、自律移動が「カスタム」に指定されているイベントは、自律移動を行うようにするプラグインを作成しました。

RPGツクールMV/MZ、どちらにも対応しています。

ツクールの標準機能では、画面に表示されている範囲内またはその近くにあるイベントのみ自律移動を行い、遠く離れた位置にあるイベントは自律移動が「固定」以外に設定されていても、自動的には動かないようになっています。

これは負荷軽減のための仕組みです。

イベントを自律移動させるには、移動先のタイルが動けるかどうか、他の全てのイベントと重なっていないかどうかを調べる必要があります。広いマップで100以上のイベントが設置されているような場合、これを全てのイベントについて逐一処理すると、非常に重くなってしまいます。

そこで、画面表示に関わらないイベントは自律移動を行わないようにして、負荷を軽減しているわけです。

具体的には、標準画面サイズである17x13マスの場合、プレイヤーから横17マス、縦13マスよりも遠くにあるイベントは、自律移動を行わないようです。プレイヤーが画面の隅にいても表示範囲のイベントはちゃんと自律移動するので、基本的にはこの仕様で問題はありません。

ただし、自律移動が「カスタム」のイベントで、ダンジョンギミックになっていたり、複数のイベントで動きを合わせているような場合は、問題が起こり得ます。

例えば、左右に移動する足場に乗って進むダンジョンギミックを作る場合、足場の初期位置が遠く離れた場所にあると、待っていても永遠に来ない足場となってしまいます。

また、複数のイベントを並べて動かしたい場合、プレイヤーに近い方のイベントが先に動き出してしまうため、各イベントの動きが揃わなくなってしまいます。

下の動画は、連動するモブキャラの代表とも言える、池の周りを回る子供たちのイベントですが、本来は2人がくっついて動くべきところ、先頭の男の子の方が先に動き出してしまうため、女の子との間が開いてしまいます。

これを解消するために、自律移動が「カスタム」であるイベントは、遠く離れた位置にいても強制的に自律移動させるプラグインを作成しました。

「ランダム」や「近づく」のイベントは従来通り動きません。「カスタム」のイベントのみを動かします。

カスタム移動のイベントが大量に置かれている場合は、重くなる可能性がありますので、注意してください。

イベント個別に自律移動の可否を設定するような機能はありません。全てのカスタム移動のイベントが対象となります。

個別のイベントについて自律移動を制御したい場合は、砂川赳さんの「画面外イベントの自律移動を許可」のご利用をお勧めします。

基本的に画面外のイベントの自律移動が問題となるのはカスタム移動の場合だけであり、カスタム移動のイベントを1つのマップに大量に置くことも少ないので、設定不要ですぐに使えるものがあると便利だと思い、作成しました。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 挑発スキルを完璧にする

2023-10-25 23:45:29

狙われ率が最大値よりも一定値以上低い場合は、狙われ率を0%と見なすプラグインを作成しました。

敵の攻撃対象を自分に集中させる、いわゆる「挑発」のスキルをきちんと実装する際に、必要となったので作りました。

RPGツクールMV/MZ、どちらにも対応しています。

「挑発」スキルと「狙われ率」

作品によって「挑発」や「仁王立ち」など様々な呼び名がありますが、いわゆるタンク役(盾役)の持つスキルで、敵の攻撃を自分に引きつける特技があります。

RPGツクールには「特殊能力値」の一つとして「狙われ率」というパラメータがあります。作品によっては「ヘイト値」などと呼んだりもしますが、敵からの攻撃の対象になりやすさを表す指標で、この値が大きいメンバーほど敵の攻撃のターゲットにされやすくなります。

RPGツクールで「挑発」スキルを実装するには、この「狙われ率」を上昇させてやればよく、一般的には「狙われ率」が上昇する特徴を持ったステートを作成して、そのステートを付与するスキルを作成することで、簡単に実現できます。

ただ、こうして作成した挑発スキルは、完璧ではありません。

狙われ率の計算法

RPGツクールの標準機能では、敵からのランダムな攻撃対象のターゲットとなる確率は、以下の式によって算出されます。

自分の狙われ率 ÷ パーティーメンバー全員の狙われ率の合計

例えば、4人パーティーで各メンバーの狙われ率がそれぞれ、200%、150%、100%、50%だった場合、4人の狙われ率の合計は500%となります。すなわち各メンバーの実際の狙われ率は、40%、30%、20%、10%となります。

今ここで、狙われ率200%のメンバーが挑発スキルを使用し、狙われ率を特徴で付与できる最大倍率である10倍(*1000%)にすると、各人の狙われ率は2000%、150%、100%、50%となります。

これで実際の狙われ率を再計算すると、分母は2300%となるため、それぞれ約87%、6.5%、4.3%、2.2%となり、明らかに1人目のメンバーにターゲットが向かいやすくなることが分かります。

しかし、よくよく考えてみると、13%の確率で本人以外のメンバーに攻撃が当たってしまう計算になります。回数に直すと、8回に1回以上の確率であり、これは思ったよりも高い確率だという印象です。

「特徴」は重ねがけができるので、「狙われ率*1000%」の特徴を複数付けて、100倍、1000倍としてやれば、流れ弾が当たる確率を限りなく小さくすることは可能です。しかし、どんなに小さくてもゼロにすることはできません。

そこで、それを解消するプラグインを作成しました。

狙われ率改良プラグイン

このプラグインを使用すると、パーティー内のメンバーの狙われ率の最大値より、一定値以上に低い狙われ率は、狙われ率0%として扱われます。

デフォルトではこの閾値は500%としています。前述の状態であれば最大値の2000%より500%以上低い狙われ率、すなわち1500%以下の狙われ率は0%と見なされるため、挑発状態では1人目以外に攻撃が向くことはありません(もちろん全体攻撃は別)。

閾値はプラグインパラメータで任意に指定することが可能です。

通常は閾値はデフォルトの500%、挑発スキル使用時の狙われ率上昇は×1000%で十分かと思いますが、同時に複数人が挑発スキルを使ったり、隊列や装備品等で狙われ率が細かく変化するようなシステムの場合は、閾値や上昇倍率を適切に調整してやる必要があるかもしれません。

試行錯誤の履歴

当初はプラグインを使わず、狙われ率×0%のステートを作成して、コモンイベントで使用者本人以外の狙われ率を0%にする方法を考えていました。

しかし、いざ実装してテストプレイしてみたところ、挑発していた人が戦闘不能になった場合に、他のメンバーの狙われ率が0%のままになるため、敵のターゲットが正しくランダムにならず、先頭のメンバーに攻撃が集中してしまいました。

これを解消するには、常に状況を監視して、挑発していた人が戦闘不能になったら、それ以外の人の狙われ率0%を解除するといった、かなり面倒なことをしなければなりません。

それだったら、素直に狙われ率の仕様を改良するプラグインを作った方がいい、ということで作ったプラグインです。

本プラグインの応用

基本は「挑発」スキルで他のメンバーに被弾しないようにするための、限定した用途のプラグインですが、他にも応用が可能かと思います。

例えば特定のイベント戦闘において、敵の特定の攻撃だけは必ず主人公がターゲットになるようにしたい場合、その行動をするターンのみ主人公の狙われ率を上げておけば、敵の攻撃は必ず主人公に当たるようになります。

その他、狙われ率というと味方にのみ関係あるパラメータのように感じますが、敵にも狙われ率自体は存在しており、敵の回復魔法や補助スキルなど味方にかける技の対象を選択する際にも参照されます。特に指定されていなければ敵キャラの狙われ率は全て100%なので、普段は完全ランダムでターゲットが選ばれているように見えます。

例えば敵が回復魔法を使う際にHPが最も消耗している敵の狙われ率を上げてやったり、防御力アップの魔法を使う際に防御力がアップしていない敵の狙われ率を上げてやったりすることで、敵の行動をより賢いものにすることができると思います。

それ以外にもいろいろと応用は利くと思います。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 乗降中はメニュー画面を開けなくする

2023-10-13 02:09:49

乗り物に乗り降りしている最中は、メニュー画面を開けないようにするプラグインを作成しました。

RPGツクールMV/MZ、どちらにも対応しています。

プレイヤーキャラクターが1人だけだったり、パーティーの隊列歩行がOFFの場合は問題ないのですが、隊列歩行がONの状態で船や飛行船などの乗り物に乗り降りした際、隊列メンバーがまだ乗り降りしている最中でも、メニュー画面が開けてしまいます。

メンバーがまだ完全に乗降しきっていないうちにメニュー画面を開いて、そのままテレポートなどの移動魔法を使って場所移動されると、予期せぬエラーが起きそうです。

ただでさえツクールは、乗り物と移動スキル/アイテムとの相性が悪いです。例えば船に乗っている時に移動スキルで場所移動すると、船に乗ったまま移動先に降り立ってしまうため、いったん暗転中に下船用のダミーマップに移動して船から降ろす、といった処理を噛ますなどの工夫を余儀なくされます。

このような処理がある中で、乗り物からの乗降が完全に終わっていないうちにメニュー画面を開いて移動されるのは、明らかにバグの温床となりそうです。

このほか、船に乗り込んだ直後にイベントを起こしたい時なども、イベント発生前に別マップに飛ばれてしまうといった不具合が発生します。

こうした不具合を防ぐために作成した、乗り物の乗降中はメニュー画面を開けなくするプラグインです。プラグインパラメータなどの設定はないので、プラグインを有効にするだけで反映されます。

隊列歩行と乗り物を使用している場合は、導入必須のプラグインだと思います。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。