RPGツクールMZ 変数イベント入門|クジ引き・コンティニュー・日付送りイベントを作ろう

当ページのリンクには広告が含まれています。

今回は、RPGツクールMZでゲーム制作の幅を広げる「変数」の使い方を、実例つきで解説します。

変数の操作とは、名前の通り、変動する数字を扱うためのイベントコマンドです。大まかには、代入・加算/減算・乱数の3つを押さえておくと理解しやすいです。

  • 代入:特定の数字情報を取得、または変更する。たとえば、これまでの歩数、戦闘勝利回数、逃げた回数、プレイヤーの座標位置、取得した情報のリセットなど
  • 加算・減算:実行するたびに数値を増やす、または減らす。たとえば、特定の人物と話した回数のカウント、宿屋に泊まると日付を進める、収集が必要なアイテムの残り個数をカウントするなど
  • 乱数:ランダムな数値を扱う。たとえば、話すたびにランダムでセリフが変わるイベント、アイテムを使用すると一定確率で壊れる仕組み、ドラクエのパルプンテのようなランダムスキルなど

変数が使えるようになると、作れるイベントの幅がかなり広がります。

今回は、日付送り(加算・減算)コンティニュー(代入)おみくじ(乱数)という3つのイベントを例題にします。難易度は、レベル1・2・3の順で少しずつ上がるイメージです。

1. 変数の操作の基本

イベントコマンドの場所

変数の操作は、イベントコマンドの「ゲーム進行」2ページ目にあります。スイッチの操作の下にあるコマンドです。

画面を開くと、主に次の項目を設定できます。

  • 変数の指定:単独、または範囲で操作する
  • 操作:代入、加算、減算、乗算、除算、剰余を選ぶ
  • オペランド:定数、変数、乱数、ゲームデータ、スクリプトを指定する

イメージとしては、オペランドで指定した数字を、代入するのか、加算するのか、減算するのかを選び、変数という数値の箱に入れる感じです。

RPGツクールMZの変数の操作画面で、変数の指定・操作・オペランドを注釈したスクリーンショット

操作の種類

変数の操作には、次の種類があります。

  • 代入:そのまま数字が入る。たとえば変数が1になる
  • 加算:現在の数字に足す。足し算
  • 減算:現在の数字から引く。引き算
  • 乗算:掛け算
  • 除算:割り算
  • 剰余:余りを出す。Web制作ではよく使うコマンドですが、ゲーム制作では今のところ使う場面はあまり多くありません

入門編でまず押さえたいのは、代入・加算・減算です。今回はここに乱数を加えて解説します。

変数の名前は分かりやすければいい

変数番号の名前は任意です。自分が見て分かりやすい名前をつければ問題ありません。

普段は「ファイル名に日本語をつけないほうがいい」と話していますが、変数名やスイッチ名は制作者側の識別用です。作っている人が分かりやすくするためのものなので、日本語を使っても大丈夫です。

文章に変数の値を表示する

文章に「\V[数字]」と入れると、その番号の変数の値を文章中に表示できます。

たとえば「\V[1]」なら、変数番号1番が今いくつになっているのかを表示できます。

2. 日付送りイベント(加算・減算)

まずは、ノベルゲームなどでよくある「日付がどんどん進行していくイベント」です。

「1月1週目 朝だよ → 夕方だよ → 夜だよ → 1月2週目……」というように、日付が順番に加算されていくシステムを作ります。

実際にやっていることは、ほとんど同じ処理をループで繰り返しているだけです。ただし、「2月」や「4週目」といったセリフの数字だけが変わるように、変数を加算して表示を変えています。

内部プログラムの構造

この日付送りは、すべてコモンイベントで管理しています。

  1. 変数の用意:23番に「日付送り・月」、24番に「日付送り・週」を作る
  2. 初期値の代入:1月1週から始めるため、両方に1を代入する
  3. ループ開始:フロー制御のループを使う。ループの中にイベントを入れると、処理が繰り返される
  4. ループ中断条件:月が3で、週が1になったらループを中断する
  5. ピクチャー表示:昼・夕方・夜の画像を切り替える。時間経過の演出用
  6. 文章表示:「\V[23]月\V[24]週目」で、月と週を自動表示する
  7. 特殊イベント:2月2週目になると、バレンタインデーのセリフが出る
日付送りコモンイベントで初期値代入、ループ、変数表示を注釈したスクリーンショット

ポイントは、月と週を文章に直接書かないことです。文章側には「\V[23]」や「\V[24]」を入れておき、変数の値だけを動かします。

日付の加算処理

夜が終わると、またループして朝に戻ります。ただし、朝に戻る前に日付を変えなければいけません。

ここで使うのが、週の加算と月の切り替えです。

  • 週の加算:「日付送り・週」を加算1にする。次に朝が来ると2週目になる
  • 月の切り替え:毎回月まで増やすとおかしくなるため、条件分岐を使う

条件分岐では、「日付送り・週が5以上になった時」、つまり4週目を超えた時に次の処理をします。

  • 月を加算1にする(月が変わる)
  • 週を代入1にする(週をリセットする)

これで、1月4週目の次は2月1週目になります。

日付送りイベントで週を加算し、5週目で月を進めて週を1に戻す処理を注釈したスクリーンショット

不等号の読み方

条件分岐では、不等号の意味を理解しておくと迷いにくくなります。

記号意味
=イコール。一致する場合
≥(大なり+下線)以上
≤(小なり+下線)以下
>(大なり、下線なし)超過。その数を含まない
<(小なり、下線なし)未満。その数を含まない
不一致。その数以外

条件分岐については次回詳しく扱いますが、まずはこの読み方を押さえておけば大丈夫です。

3. コンティニューイベント(代入)

次は、ボス戦を想定したコンティニューイベントです。

戦闘が始まる前のHP・MP・アイテム数を記録しておき、戦闘に敗北したらその情報を復元して、もう1回戦えるようにします。

バイオハザードやアンチャーテッドのように、やられたその場でサクサクやり直せる仕組みも、イベントで組むことができます。

HP・MPの記録と復元

ここでは、コモンイベント「コンティニュー戦闘前」で管理しています。

  1. ラベル「戦闘開始」を設置:コンティニュー時にここまで戻る
  2. 戦闘前のステータスを変数に代入:変数27番「アクター1HP」には、ゲームデータ → アクター(ダンディ)のHPを入れる。変数28番「アクター1MP」には、ゲームデータ → アクター(ダンディ)のMPを入れる
  3. 戦闘の処理:「敗北可能」にチェックを入れる。これは3ページ目の「戦闘の処理」にある
  4. 敗北時の処理:「もう1度戦うか?」の選択肢を表示する。「はい」なら、HPの増減で変数27番分を増やし、MPも同様に復元する。その後、ラベルジャンプ「戦闘開始」で最初に戻る。「いいえ」なら、ゲームオーバーにする
コンティニュー用コモンイベントで戦闘前保存、敗北時分岐、復元して再戦する処理を注釈したスクリーンショット

オペランドの「ゲームデータ」では、アイテムの所持数、武器の所持数、防具の所持数など、さまざまな情報を取得できます。

ラベルとラベルジャンプ

フロー制御にある「ラベル」と「ラベルジャンプ」は、コンティニュー処理で便利です。

  • ラベル:目印を置く。「戦闘開始」という名前のラベルを設置する
  • ラベルジャンプ:ラベル名が一致している場所にジャンプする

つまり、コンティニューで「はい」を選ぶと、「戦闘開始」ラベルまで戻り、また最初から戦闘が始まります。

アイテム数の復元

アイテムの復元は、HP・MPより少し厄介です。

今回の処理では、戦闘中に使ったポーションの数を計測しておき、使った分を戦闘後に復元するという方式にしています。

計測のしくみは次の通りです。

  1. コモンイベント「アイテム判定」を用意する
  2. データベースのアイテム「ポーション」の使用条件で、このコモンイベントを呼び出すように設定する
  3. 変数25番「アイテムID判定」に「直前に使用したアイテムのID」を代入する
  4. 条件分岐で「アイテムIDが7(ポーションのID)と一致した場合」を判定する
  5. 変数26番「ポーション使った数」に1を加算する
  6. 戦闘後のコンティニュー時に、「アイテムの増減」で変数26番分のポーションを増やす
アイテム判定コモンイベントで直前のアイテムID取得、ポーション判定、使用数加算を注釈したスクリーンショット

この仕組みを全アイテムにコピーすれば、何のアイテムを何個使ったかを計測できるようになります。

ハイポーションなら、「ハイポーション使った数」という新しい変数を用意する、という考え方です。

4. おみくじイベント(乱数)

最後は、1/5の確率で当たりが出るくじ引きイベントです。

ここでは、変数の操作で乱数を使います。

乱数の使い方

変数の操作で「乱数 1~5」を設定すると、1から5の数字がランダムで変数に代入されます。

  • 代入の場合:ランダムで1~5の数字がそのまま入る
  • 加算の場合:ランダムで1~5の数字が足される
  • 減算の場合:ランダムで1~5の数字が引かれる

たとえば自作の戦闘システムなら、敵の攻撃がランダムで1から5ダメージ当たる、という処理にも使えます。

変数22に乱数1から5を代入する設定を注釈したスクリーンショット

内部プログラムの構造

おみくじイベントの構造は、次の通りです。

  1. ラベル「スタート」を設置:もう1回引く時にここまで戻る
  2. 乱数1~5を変数22番「汎用」に代入
  3. 変数22番が2以下:外れの画像を表示する(おじさん)
  4. 変数22番が4以下:別の外れの画像を表示する
  5. 変数22番が5以上当たり! 水着のお姉ちゃん画像 + ME演奏 + 「当たり」の文字
おみくじイベントで乱数結果ごとの外れと当たりの条件分岐を注釈したスクリーンショット

5と一致する場合、つまりイコールで判定しても動きます。

ただし、バグ対策として5以上にしておくことが多いです。何かの手違いで6以上が出てしまった場合でも、想定外の状態になりにくくするためです。

アニメーションとピクチャーの注意

演出面では、次のような処理を入れています。

  • くじを引いた時に、アニメーションの表示(放射線エフェクト)で演出する
  • 当たりの時は、MEの演奏(ミュージックエフェクト)で短い効果音を流す
  • ピクチャーの消去を忘れずに入れる。ピクチャー番号1番を表示したら、必ず1番を消去するイベントを入れる
おみくじイベントで当たり演出後にピクチャーを消去し、もう一回ならラベルジャンプする処理を注釈したスクリーンショット

ピクチャーの消去をしないと、画像がカメラのレンズにペタッと貼り付いたように、どこに移動してもずっとついてくる状態になります。

ピクチャーについては、また別の回で詳しく扱います。

まとめ

変数の操作は、変動する数値を扱うためのコマンドです。まずは、代入・加算/減算・乱数の3つを押さえておきましょう。

  • 代入:数値情報を取得、または変更する。戦闘前のHP・MPを取得し、戦闘後に復元するコンティニュー処理などで使える
  • 加算・減算:数値を増やす、または減らす。日付を進める、アイテムの残り個数をカウントするなどに使える。たけのこを5つ集めるイベントなら、1つ取ったら残り4つになるような処理です
  • 乱数:ランダムな数値を扱う。くじ引き、一定確率で壊れるアイテム、パルプンテ風ランダムスキルなどに使える

今回のおみくじイベントを応用すると、ガチャガチャのようなイベントも作れます。

たとえば、出たアイテムをアビリティとして取得できるようにして、装飾品で装備すると特殊能力が得られる、といった設定も可能です。

また、今回使っていないオペランドもたくさんあります。マップID、パーティーの人数、所持金、歩数、プレイ時間、セーブ回数、戦闘回数なども計測できます。

スクリプトを使えば、特定のダンジョンにいる時だけ使えるスキルを作る、といったことも可能です。

次回は、条件分岐について詳しく見ていきます。装備やアイテム・所持金によってセリフが変わるイベント、格闘ゲーム風のキャラクターセレクト、パスワードで宝箱が開くシステムなどを例題にします。