開発日誌

テクニック

[ テクニック ] 何度か使うと壊れるアイテムの実装

2021-06-25 00:37:34

戦闘中に複数回使用でき、何回か使うと壊れてしまうアイテムを、プラグインなしで実装する方法の解説です。

いわゆるドラクエの「祈りの指輪」のようなアイテムですね。

ただ、祈りの指輪は移動中でも使えますが、RPGツクールの標準仕様だと、メニュー画面(移動中)で使用した場合に、壊れた時のメッセージをどう表示するかという問題があるので、今回は戦闘中にのみ使用できるアイテムに限定しています。

こういうのはプラグインでないとできないと思っていましたが、コモンイベントだけで比較的簡単に実装できました。

壊れる確率をどう設定するかというのがゲームバランスに直結します。自分専用に作るならともかく、プラグインとして広く公開するとなると、この確率計算の指定方法をどうするのかが悩ましくなりますが、コモンイベントであれば確率計算はユーザーが自由に作れます。

ここでは例として、「安息のハープ」という、戦闘中にのみ何度か使えて味方全員のHPを50回復するアイテムを作ってみます。

壊れる確率ですが、3回までは確実に使えて、3回目の使用後に25%の確率で壊れ、4回目に50%、5回目に75%、6回目は100%の確率で壊れる、という風にしました。1回目でいきなり壊れてしまうと残念なので、必要な時には躊躇せず使えるようなバランスを目指しました。

まずはコモンイベントを作成します。

このコモンイベントで、使用回数のカウントと壊れる確率の計算、そして壊れた場合の処理を行います。

壊れるアイテムが複数ある場合は、よっぽど数が多くない限りは、アイテムごとにコモンイベントを用意した方がいいかもしれません。壊れる確率の計算やメッセージの表示部分が、アイテムごとに異なると思うので。

変数を2つ使用します。1つはこのアイテムの使用回数をカウントする専用の変数。もう1つは計算過程で使うだけなので汎用の変数で構いません。

まず最初に、使用回数のカウントと壊れる確率の計算です。

◆変数の操作:使用回数 += 1
◆条件分岐:使用回数 >= 3
 ◆変数の操作:汎用変数 = 6
 ◆変数の操作:汎用変数 -= 使用回数
 ◆変数の操作:汎用変数 -= 乱数 0..3

使用回数を+1し、2回目までは壊れないので、条件分岐で3回目以降の場合のみ、壊れる確率の計算に入ります。

確率計算部分が少しややこしいですが、まず「6 - 使用回数」を算出しています。3回目の時は3で、4回目の時は2、6回目の時は0となります。

そしてその値から、0~3の乱数を引き算します。そうすると結果の値は、3回目の時は3~0、4回目の時は2~-1、6回目の時は0~-3となります。

結果の値が0以下の時に壊れる、とすることで、最初に設定した3回目に25%、4回目に50%、6回目に100%という確率が実現できます。

この辺の確率計算は、ゲーム全体のバランスを考えて、他にも自由に設定可能です。

 ◆条件分岐:汎用変数 <= 0
  ◆SEの演奏:壊れた際のSE
  ◆スクリプト:BattleManager._logWindow.push('addText', '壊れたメッセージ');
        :BattleManager._logWindow.push('wait');
        :BattleManager._logWindow.push('clear');
  ◆アイテムの増減:安息のハープ - 1
  ◆変数の操作:使用回数 = 0

前述の通り、条件分岐で汎用変数が0以下の時に、壊れた場合の処理を行います。

まずは壊れた際に分かりやすくSEを鳴らしました。この辺の演出はお好みでどうぞ。

次に壊れたメッセージを表示しますが、戦闘ログに表示させるため、ここはスクリプトを用いています。壊れたメッセージは任意のテキストが使用できます。

イベントコマンドの「文章の表示」だと、戦闘ログではなく通常のメッセージウィンドウで表示されてしまうため、ややテンポに劣ります。ここはどうしてもスクリプト頼りになるため、プラグインなしで実装と言うとちょっと語弊があるかもしれませんが。

そして当該アイテムを1つ減らして、最後に使用回数を0にリセットします。

以上で作成したコモンイベントを、当該アイテムの「使用効果」のコモンイベントに指定します。

こうすることでアイテム使用時にコモンイベントが呼ばれ、壊れる判定と壊れた時の処理が行われます。

RPGツクールMVの頃は、1つのアイテムにつき1つのコモンイベントしか呼べなかったのですが、RPGツクールMZになって複数のコモンイベントを順に呼べるようになり(今回の例では複数呼べる必要はないですが)、特殊アイテムの実現もやりやすくなりました。

なお、アイテムの消耗は「なし」(消耗するかどうかはコモンイベントで行うので)、使用可能時を「バトル画面」に設定するのを忘れないようにしてください。

今回は戦闘中にのみ使用可能なアイテムということにしていましたが、移動中(メニュー画面)でも使用可能にした場合、変更する必要があるのは壊れたメッセージの表示部分だけです。

イベントコマンドの「条件分岐」で、スクリプトに$gameParty.inBattle()と記入すれば、戦闘中か否かを判別できるので、戦闘中なら上記と同じように戦闘ログに表示、そうでなければ「文章の表示」でメッセージを表示するようにすればOKかと思います。

コメント
お名前
コメント
※ 確認画面はありません。