3テラバイト

プログラム関連備忘録サイト。主にゲーム。

RPGツクールMV

RPGツクールMV – スクリプトでスイッチによる可変の選択肢を作る

投稿日:2020年5月7日 更新日:

イベントコマンドの選択肢の表示で最大6個の選択肢を表示できますが、選択肢の内容をスイッチ等の要素から可変にすることができません。
特定のスイッチがONの場合に選択肢を増やす場合は、別の選択肢を用意し条件分岐することにより実現しますが、分岐が多くなるとコードや設定が煩雑になります。

そこで、今日はイベントコマンドのスクリプトでスイッチの値から選択肢の内容を可変にする方法についてまとめていきます。

確認環境

RPGツクールMV Version 1.6.2

イベントの内容

スイッチと変数をそれぞれ6個使用します。
イベントの内容は以下の画像の通りになります。

解説

1つ目のスクリプト

for(var i = 1; i <= 6; i++)
  $gameVariables.setValue(i, "");

では、表示する選択肢を格納するための変数の初期化を行っています。
変数の1番から6番を使用していますが、その他の番号を使用する場合、例えば変数の100番から106番を使用する場合は100と106にそれぞれ変更します。

2つ目のスクリプト

var choiceArray = ["A", "B", "C", "D", "E", "F"];
var choicedArray = [];
for(var i = 1; i <= 6; i++)
  if($gameSwitches.value(i))
    choicedArray.push(choiceArray[i - 1]);
this.setupChoices([choicedArray,0,0,2,0]);
this.setWaitMode('message');
for(var i = 1; i <= choicedArray.length; i++)
  $gameVariables.setValue(i, choicedArray[i - 1]);

では、スイッチがONになっている場合選択肢を追加しています。

最初の変数choiceArrayに選択肢の内容を設定。

for(var i = 1; i <= 6; i++)
  if($gameSwitches.value(i))
    choicedArray.push(choiceArray[i - 1]);

の部分でスイッチの1番から6番でONのものに対応する選択肢がchoicedArrayに追加されていき、選択肢の表示にはchoicedArrayを使用しています。

for(var i = 1; i <= choicedArray.length; i++)
  $gameVariables.setValue(i, choicedArray[i - 1]);

の部分では選択肢の内容を変数に格納しています。
先ほどのスクリプトで使用する変数の番号を1から変更した場合はその値と同じ値をi + 1の部分の1に置き換えます。

3つ目のスクリプト

var label = $gameVariables.value(this._branch[this._indent] + 1);
for (var i = 0; i < this._list.length; i++) {
  var command = this._list[i];
  if (command.parameters[0] === label) {
    this.jumpTo(i);
  }
}

では、選択肢を選んだ後に、選ばれた選択肢の内容と同じラベルにジャンプする処理を行っています。
先ほどのコード同様に、使用する変数の番号を1から変更した場合はその値と同じ値をthis._branch[this._indent] + 1の部分の1に置き換えます。

以降は通常のイベントコマンドのみで、選択肢に設定した値と同じラベルを用意しておくと、選択されたラベルにジャンプします。

まとめ

今日はスクリプトからスイッチの値によって可変の選択肢を作成する方法についてまとめました。
イベントコマンドのみでも実現可能ですが、コードが長くなってしまいがちな部分かと思いますので、よろしければこちらの方法をご検討ください。

それではここまでお読みいただきありがとうございました。

-RPGツクールMV


  1. ミドリコ より:

    たいへん役立つ情報ありがとうございます! MZでも動作しました。
    MZでの動作確認となりますが、使用する変数を1~6から変えた場合についての
    記載の間違いを見つけたのでご報告します。

    ●変更が必要な場所は
    1つめのスクリプト
    ・i = 1; i <= 6; の数値

    2つめのスクリプト
    ・i = 1; i <= 6; の数値
    ・(i + 1ではなく) [i – 1]の数値(2つある[i – 1]の1箇所目のみ)

    3つ目のスクリプト
    ・変更の必要なし
    ($gameVariables.value(this._branch[this._indent] + 1))の数値を変えるとラベルにジャンプしませんでした)

    となりました。ご確認頂ければ幸いです。

    • 3テラバイト より:

      コメントありがとうございます!
      返信が遅くなりまして申し訳ございません。

      記事の誤りについてもご指摘いただきありがとうございます。
      見直してみて説明も煩雑でわかりにくいため、併せていずれ全体的に書き直しておきたい所です。
      少しでも参考になったようであれば何よりです。
      ありがとうございました!

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

RPGツクールMVでタイトル画面に別マップからゲームを開始するコマンドを追加できるプラグインTMNewGameExの使い方

このプラグインを導入すると、上の画像のようにタイトル画面にコマンドを追加でき、そのコマンドを選択するとニューゲームとは別のマップや位置からゲームを開始することができます。 このプラグインはtomoak …

no image

RPGツクールMVでアイテム等のヘルプウィンドウを拡張するプラグインDescriptionExtendの使い方

スキル、アイテム、武器、防具についてはデータベースから説明テキストを2行までで設定できますが、この行数を拡張することができるプラグインです。 このプラグインはトリアコンタンさんが作成されたプラグインで …

no image

RPGツクールMVで複数のタイルをまとめて配置する方法

こんにちは、今日はRPGツクールMVの複数タイルをまとめて配置する方法についてまとめていきます。 複数タイルで表現する大きいものを配置する際に便利な機能です。 確認環境 RPGツクールMV Versi …

no image

RPGツクールMV – 自作プラグインでアイコンを表示する

こんにちは、今日はRPGツクールMVの自作プラグインで独自の画面にアイコンを表示する方法についてまとめていきます。 確認環境 RPGツクールMV Version 1.6.2 アイコンを表示する関数 W …

no image

RPGツクールMVでゲーム中にレベル上限を増やせるプラグインTMMaxLevelの使い方

プラグインを導入すると、データベースで設定したレベル上限をプラグインコマンドを用いてゲーム中に増やすことができます。 このプラグインはtomoaky様が制作されたものです。 確認環境 RPGツクールM …