開発日誌

テクニック

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

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の状態で船や飛行船などの乗り物に乗り降りした際、隊列メンバーがまだ乗り降りしている最中でも、メニュー画面が開けてしまいます。

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

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

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

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

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

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

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

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 特定の装備タイプをアイテム一覧に表示しない

2023-10-04 01:18:33

指定した装備タイプの装備品をアイテム一覧で非表示にするプラグインを作成しました。

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

普通のアイテムはアイテムタイプで「隠しアイテムA/B」を設定すれば、アイテムリストに表示されない、特殊な隠しアイテムを作成することができますが、同じことを防具でもできるようにしたプラグインです。

プラグインパラメータで指定した装備タイプの防具は、メニューコマンドの「アイテム」で「防具」の一覧には出てこないようになります。

装備タイプは複数指定が可能です。武器でも設定できますが、武器は1つの装備タイプしかないため意味がなく、基本的には防具に対して使用するイメージです。

公式のツクールWebフォーラムのスレッドで挙がった要望に対応したものです。

もともとの相談としては、覚えられるスキル数に制限を設けて、最大値以上にスキルを覚えた場合は、どれか忘れるスキルを選ぶようなシステムを導入したいというものでした。

しかし、専用のユーザーインターフェイスを作るのは簡単ではないため、比較的簡単に実装できる方法として、以下の装備を利用する方法を提案しました。

  1. 装備タイプに「スキル」を追加
  2. 装備タイプを「スキル」にした防具を作成し、特徴にスキル追加を設定
  3. 装備スロットを拡張できるプラグインを導入して、スキル装備を覚えられる数だけ増やす

▲装備タイプに「スキル」、特徴に「スキル追加」を設定した防具を作る

一度に覚えられるスキルの個数が4~5個程度であれば、スキルの習得・忘却を装備の着け外しで代用するこの方法が、専用のUIを作るより楽に実装できると思います。スキルの最大個数が10以上ある場合は、さすがに専用のメニューを用意した方がいいかと思います。

装備スロットを拡張するプラグインは、砂川赳さんの「装備スロットを自由に変更」プラグインをお勧めしました。このプラグインを使えば同じ装備部位で複数装備が可能になるので、これで覚えられる個数分だけスキル装備のスロットを用意して、覚えられるスキルの数を絞ることができます。

▲スキル追加用の防具が見えてしまう

これで基本的にはOKだと思いましたが、問題はメニューの「アイテム」で「防具」を選択した際に、このスキル付与用の防具が表示されてしまうことです。

表示されてもいいと割り切ってしまうのも一案ですが、特定の装備タイプをアイテム欄から隠すのはそれほど難しい処理ではなかったので、プラグインを作成した次第です。

▲スキル追加用の防具は非表示になった

プラグインパラメータで隠したい装備タイプの番号(上記例では「6」)を指定してやれば、その装備タイプの装備品はアイテム一覧には表示されなくなります。

もちろん「装備」のメニューでは問題なく表示されます。

スキルの入れ替えを防具で行う、という個別の要望に合わせて作成したプラグインですが、このシステムはそこそこ採用される機会も多そうだということと、他にも応用ができそうだと思ったので、一般向けに公開しました。

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

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] ショップでの利用金額を取得

2023-03-23 21:25:18

お店での購入金額と売却金額をそれぞれ指定した変数に取得するプラグインを作成しました。

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

イベントコマンドの「ショップの処理」で、購入した金額および売却した金額をそれぞれ指定した変数に格納することができます。

例えば、購入金額が0だった場合は、何も購入していないことになります。

購入金額が0より大きいか否かで分岐することによって、購入していたら「毎度ありがとうございます」、何も購入していなければ「買わないなら消えろ!」みたいに、購入の有無でメッセージを変えることができます。

購入金額が一定以上で特殊なメッセージを出したり、イベントを発生させたりすることもできます。

購入か売却かでメッセージを変更することもできます。

購入金額を別の変数に加算していくことで、累積の利用金額によってイベントを起こすことも可能です。

購入のみのショップであれば、前後の所持金を比較することで利用金額を算出することができますが、売却も可能なショップだと、前後の比較だけでは正しい利用金額が割り出せないので、このプラグインが必要になります。

変数に格納されるのは、直前の「ショップの処理」で変動した金額のみです。「ショップの処理」実行時に、購入金額と売却金額の変数は0にリセットされます。累積の利用金額を出したい場合は、別の変数を作って加算してやる必要があります。

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

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 「盗む」スキルの実装

2023-03-16 22:28:14

敵の持っているアイテムを奪うスキル、いわゆる「盗む」スキルを実装できるプラグインを作成しました。

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

いわゆる「盗む」のスキルは、盗賊職の花形スキルとして数多くのRPGで採用されていますが、ツクールシリーズには標準では用意されていません。

既存のプラグインでより高機能なものもありましたが、もっと単純な設定で動くものが欲しかったので自作しました。

「盗む」ステートの作成

まず事前準備として、「盗む」が成功した状態を表すステートを1つ作成します。

このステートはダミーステートなので、名前以外の各種設定やこの状態になった時のメッセージなどは、設定しなくて構いません。むしろ行動制約やアイコンなど、余計な設定が付与されないように気を付けましょう。

そしてプラグインパラメータの「盗む成功ステート」で、この作成したステートを指定します。

このステートの付加をもって、「盗む」が成功したか否かを判定する仕組みとなっています。

「盗む」スキルの作成

次に「盗む」スキルを作成します。

スキルの使用効果で、先ほど作成した「盗む成功ステート」を付加するように設定します。

「ステート付加」の確率を調整することで、「盗む」スキルの基本成功率を設定することができます。

スキルのメッセージやアニメーションは、敵からアイテムを盗もうと狙っている時のものを設定します。「盗む」が成功/失敗した時のメッセージやアニメーションは、別で設定するようになっています。

また、敵キャラの特徴の「ステート有効度」を設定することで、敵キャラごとに「盗む」の成功しやすさを調整することができます。

なお、本プラグインで実装できる「盗む」スキルはアクター専用であり、敵がプレイヤーのアイテムを盗むような仕様には対応していません。

盗めるアイテムの設定

盗んだ時に手に入れるアイテムは、基本的に敵キャラのドロップアイテムがそのまま適用されます。

既存の「盗む」プラグインは、盗めるアイテムを別途メモ欄で指定する方式だったため、ドロップアイテムの設定をそのまま利用できるものとして開発しました。

プラグインパラメータの「盗めるアイテム」で、盗む対象となるドロップアイテムを指定できます。

「ドロップアイテム1~3のみ」を選ぶと、それぞれ指定したドロップアイテムのみが盗めるアイテムとなります。例えば「ドロップアイテム2のみ」を指定した時に、敵キャラのドロップアイテム2が設定されていなかった場合、その敵キャラは何も盗めるアイテムを持っていないことになります。

「ドロップアイテムの出現率依存」を選ぶと、複数のドロップアイテムの中から、出現率によってアイテムが決まります。例えば、アイテムAの出現率が1/2、アイテムBが1/4、アイテムCが1/8だった場合、A:B:C=4:2:1の割合、すなわちアイテムAが4/7の確率、アイテムBが2/7、アイテムCが1/7の確率で、それぞれ盗んだ時に手に入ります。

また、プラグインパラメータの「再度盗めるかどうか」をONにすると、同じ相手から何度でも盗むことができます。OFFにすると、一度盗んだ相手からは盗めなくなり、倒した時にアイテムもドロップしなくなります。

メッセージとアニメーション

プラグインパラメータで、以下のメッセージとアニメーションをそれぞれ指定できます。

  • 「盗む」が成功した時
  • 「盗む」が失敗した時
  • 相手が盗めるアイテムを何も持っていない時
  • 相手から既にアイテムを盗んでいてこれ以上盗めない時

メッセージでは、%1で自分のアクター名、%2で相手の敵キャラ名が表示できます。盗む成功時のメッセージでは、これに加えて%3で盗んだアイテム名を表示することができます。

相手から既にアイテムを盗み済みの判定は、「再度盗めるかどうか」がOFFの場合のみ有効です。

「盗めるアイテムなし」と「既に盗み済み」の判定は、「盗む」の成功判定より先に行われます。盗めるアイテムがないのに、何度も「盗む」にトライしてしまう、という心配はありません。

まとめ

いわゆる「盗む」のスキルは、かなり仕組みがそれ専用な上に、成功確率や盗めるアイテムといった細かい仕様が千差万別なため、なかなかツクールの標準機能として組み込むのが難しいと思います。

今回は個人的に標準的な「盗む」スキルとして、以下のような仕様で作りました。

  • 味方専用
  • 成功率はステートの付与率で判定
  • 盗めるアイテムはドロップアイテムに準拠
  • 何度でも盗めるかどうかはパラメータで変更可

したがって、以下のような仕様は、本プラグインでは対応していません。

  • 敵がプレイヤーのアイテムを盗む
  • 成功率に運以外のパラメータを関与させる
  • ドロップアイテムとは別で盗めるアイテムを設定

成功率などはプログラムの改造でできると思いますので、細かい仕様変更はご自身でお願いします。変更が大がかりでなく、汎用的だと思える要望であれば、修正も可能ですので、ご要望をお寄せください。

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