(無)青島製菓 2022/10/01 23:09

RPGツクールでのシミュレーションゲーム制作 Vol.3 変数編②

こんにちは、あるいはこんばんは。青島清華です。

今回はシミュレーションゲーム制作の第3回。ひとまずこれで終了ですが、ちょっとしたテクニックの紹介です。


具体的な数字は見せないと言ったな……

嘘つきました(笑)加工がめんどくさいのでそのまま見せます(笑)
その代わり細かい解説は省かせてください。
例えば購入・売却画面では「指定資源」にそれぞれの選択肢で出現させた「資源」に対応する変数を格納し、取引が成立時にその変数の値ごとに条件を分けて、それぞれの資源を増減させている、という処理をしていますがすべて解説すると結構長くなってしまうので割愛です💦

乱数の増減と範囲の指定

変数の加減乗除ではランダムな値を入力することも定数を入力することもできますが、マイナスの値を指定することもできるので、ランダムに「増減」させることも可能です。本作の「相場の変動」ではランダムな値の増減にしています。一度、全相場を±5の範囲で変動させた後に、個別の設定をしています。単に面倒だからと思ってやったやり方ですが、このやり方だと極端な値になる確率が減ります。例えば青の星の水の相場の変動ですが、可能性としてはー15~+10までの変動が起こり得ます。しかし、1回の設定で「ー15~+10」をランダムに発生するようにした場合にはすべて同じ確率で発生するのですが、設定を2回に分けているので、最大値や最小値が発生するためには2回の判定の両方で最大値あるいは最小値が出てくる必要があるので、極端な値になる可能性は低くなります。まあ、全く意識せずに設定したのですがw
また、変動の結果、例えば水の相場が-50になったりすると商品を売った時にお金が減る、ということになりかねないので、一定の範囲に収まるようにしています。青の星の水の場合は50~150の間で変動するようにしているので、

「50よりも小さくなった時には50」
「150よりも大きくなった時には150」

になるように設定しています。不等号の向きを間違えるととんでもないことになるので注意してください。さらに、難易度で相場の変動量が変わったり、変動する範囲が変わるということもできますが、すべての項目について条件設定をしないといけないので大変です。そして、プレイするごとに相場の変動範囲を変える、ということもできると思いますが、こちらも「○○の星の××の資源の最大値・最小値」という変数を別に設定する必要があります。

ループを使った繰り返し処理

他のやり方もありますが、購入や修理・補給については繰り返し処理を利用しています。どの場面かというと、「選択した購入量で購入した場合に所持金が足りないときに、自動的に購入可能な量まで取引量を減らす」というものです。本作では値下げ交渉ができるため、交渉に成功すると最初の所持金では買えない量の商品が買える可能性があることと、RPGツクールMZの悲しい点で、数値入力機能が桁数しか設定できずに範囲、あるいは最大値を設定できないことが原因です。とりあえず多量の設定をしておけば全買いになるとも言いますがw
上の画面では「参照値」に単価を代入した後、取引量をかけて合計金額を出し、それが現在の所持金を下回るまで「取引量を1減少させ、参照値=合計金額を単価分減少」ということを繰り返させています。ちなみに一切取引できないときは「取引を中止しました」というメッセージが出るようにしています。

応用編:マップ移動とループ処理を組み合わせる

なぜ、購入できる量を計算でやってしまわないのかと言うと、これを紹介したいからです。前々回のマップ編で透明状態で移動したら拠点確認画面に、というものをアイディアとして書き留めておきましたが、拠点の数が増えてきた場合、直接移動ルートを指定するやり方は現在の拠点の場所と移動先の拠点ごとに条件を分けてそれぞれに移動ルートを設定しなければならないため、設定が煩雑になります。
しかし、このやり方であれば座標さえ分かっていれば、新しく拠点を追加しても簡単に移動先を追加することができます。
RPGツクールMZでは各マップの一番左上の座標が原点(0,0)に設定されており、右に行くとX座標が増え、下に行くとY座標が増えます。X,Yどちらもマイナスになることはありません。
そこで移動先の座標が(8,5)の場合、上のスクリーンショットのように設定をしておけば、現在地にかかわらず目的地まで移動してくれることになります多分。より滑らかな移動をしたい場合には条件設定を追加して斜め移動を加えるとよいでしょう。
気を付けておきたいのは、この仕組みだと、ほぼ最短距離での移動になります。移動可能地形かどうかは無視されるので、俯瞰視点での視点の移動や、今作のような宇宙での移動では利用できますが、一般的な陸上マップでの移動、特に迂回(コの字やU字の移動)が必要な場面では使えませんのでご注意を。
また、繰り返し処理自体は「風呂田の冒険」ではターン終了処理で利用しています。例えば一つのクエストで3日経過する場合には、ターン終了処理を3回繰り返す、といった具合です。

ランダムで発生するイベント

ランダムでイベントを発生させるときには乱数を利用します。もっと数字が小さくてもかまわないのですが、分かりやすいので1~100で発生させています。何もイベントが起こらないときは空イベントです(上から4行目)。また、特に同時にイベントを発生させるのでなければ、「それ以外のとき」を利用しておいた方がイベントの誤作動が少なくなるのでなるべくチェックしておいた方がいいでしょう。

現在の設定では
50%でイベントなし(50まで)
15%で敵A(65まで)
10%で敵B(75まで)
5%で敵C(80まで)
20%で隕石(それ以外)

と設定しています。それぞれ、乱数がカッコ内の数値以下の時に発生するようにしています。ところが、もし、毎回別の枠で条件を設定してしまうと、同じポイントで複数回敵に遭遇してしまいます。また、毎回乱数の設定をし直すと、全体で見たときのイベントの発生率が変わりますのでご注意を。
ちなみにマップ編でも少し触れましたが、この乱数を使ったイベント方式だと、逃走確率について設定することが可能です。(実は今作、敵ごとに逃げやすさが異なっています)画像だと「逃げる」の分岐の後、乱数の再設定と条件分岐をしている部分です。乱数の再設定をしないと、以前、利用した数字をそのまま使うことになり確率が変わってしまうのでご注意ください。また、色々と設定をすれば、戦闘開始時のシチュエーション、例えば「バックアタック」や「ふいうち」「サイドアタック」「はさみうち」のようなこともある程度、再現可能になるでしょう。



以上で、今作の内部についての説明はいったん終了いたします。ささやかではありますが、皆様の制作の一助となれば幸いです。何か不明な点がございましたらコメント欄やメッセージ等でお問い合わせいただければ、可能な範囲でお答えさせていただきます。
今回はこの辺りで失礼いたします。それでは!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索