投稿記事

シミュレーションの記事 (3)

(無)青島製菓 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%で隕石(それ以外)

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



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

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

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

(無)青島製菓 2022/09/06 21:50

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

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

今回はちょっと早い更新です。(先月サボったので今月はちゃんと制作更新の報告をするつもりでもあります)シミュレーションゲーム制作の第2回ですが……


変数操作は難しい!

率直に言って、この記事を見るだけでいきなりシミュレーションゲームは作れません(笑)今持っているアイディアについていろいろと書きたい気もするのですが、実際に動く物を組み上げてからお見せしないと、問題が続出ということにもなりかねないので、より詳しく書いたものについてはまた機を改めさせてください。今回お伝えするのは「トレーダーでおまっ!」(以下本作)をどうやって作っていったか、ということについてです。

まず要素を書き出す

お見せしてしまうと、現時点(Ver.1.01)での本作の変数一覧です。実際には使っていないものや空白のままになっているものもあります。
変数、あるいはパラメータといった方が耳なじみがよい方もいらっしゃるかもしれませんが、ゲーム内で使われるさまざまな数値です。所持している資源の量だとか兵士の数とか現在の日付といった様々な数値を、項目名を付けて記録していくことができます。
以前どこかで書いたのですが探しません、RPGツクールの「変数」の機能、一度作り始めてしまうとあとから修正するのが面倒なので、(どうしても後から追加で必要になることはありますが)なるべく先にどういった要素が必要なのかを考えておいた方が楽です。自分の場合は紙に書きつけていくことにしました。

  • まず交易のゲームということが決まっていたので所持金と各資源の所持量・それぞれの星での相場
  • 宇宙船での移動を考えていたので燃料や燃費・貨物の最大積載量
  • 前回でも使った目的地・現在地
  • 初期段階から将来的な拡張を予定していたのでゲームモードや難易度の選択

といったことがメモ書きには書きつけてあります。交渉システム自体は最初から考えていましたが変数を用意していませんでしたw

また、現在制作中の作品(風呂田の冒険)でも利用しているのですが、確率で色々な計算をしたい時や、計算の記録として利用できるものがあった方がいい、というのが経験上分かっていたので、「乱数」や「参照値」の項目を用意しています。ゲームのデザイン次第ですが、複数の要素について、確率で判定し、しかも、お互いに影響せず独立しているような場合……、というと何のことやらかもしれませんが、「同じマップの中に宝箱が二つ以上あり、その宝箱が出るかどうかは宝箱ごとに確率を設定する」というような場合は、それぞれの項目を複数個用意しておく必要があります(例えば最大で出現する宝箱の数だけ)。そうでないと、出現がパターン化してしまうのです。今回はとりあえず一つずつで始めましたが、足りないときは適宜追加しました。

大まかな計算方法を考える

要素を粗方書き出したらそれがどのように動いていくのか、つまりどのような計算をしていくのか書き出していきます。そのためにはゲームのおよその流れを書いておく必要があります。本作の場合、①仕入れ→②移動→③販売→①に戻る、というのを繰り返すことにしていました。そして、それぞれの項目でどのような処理をしたりイベントを発生させるかも、メモしていきます。例えば、②では

  • ターン経過ごとの相場変動
  • 移動には燃料が必要
  • 時々敵と戦闘
  • (遭遇)イベント発生

といったことが書いてあります。
また、今作はそれほど変数同士の計算で複雑なことはしていないので割愛していますが、例えば「風呂田の冒険」の方では以下のような内政(もどき)があります。


初期案では「農業従事者数×農業技術×経過日数=(農業での)食糧生産」というようなことが書いてありました多分。実際にはここに一定の数値をかけたりして調整をしていますし、今後も変更があると思いますが、複雑な計算をする場合には、調整は後でいいので変数同士の関係は紙に数式を書くなどしてイメージした方がよいと思います。
本作では、計算自体は単純ですが、各星ごとに相場の傾向があったので、それについては先に決めて、表にしておきました。(青の星は水が特産でエネルギー資源が高く売れるなどなど)

「変数」以外も使えます!

さて、大体の設計図が出来上がったところで制作に取り掛かっていくわけですが、この「変数」、あるいはパラメータは、ゲームに備わっている「変数」の項目以外を利用することができます。例えば、

  • 「所持金」についてはパーティの所持金
  • 宇宙船の「耐久値」「燃料」については各キャラクターのHPとMP(項目名を変更)

この二つを本作では利用していますが、各キャラクターの能力値というのが案外使えると思います。
現時点では実装していませんが、本作では宇宙船の乗り換えができるようにしようかと思っています。RPGツクールではキャラクターに当たる「アクター」と「職業」が設定でき、同じキャラクターでも「職業」が変わると能力値も変化します。これを利用して、宇宙船の乗り換えをした時には「職業」を変更するようにし、耐久値や燃料、燃費もそれに合わせて変化するようにし、かつ必要な時に参照する値もキャラクターの能力値にしておけば、移動イベントなどの設定を変更することなく、新しい宇宙船を実装することができます。

応用編:戦略シミュレーション

各地に拠点があり、そこから部隊を出撃させて敵と戦うような戦略シミュレーションを作る場合、「拠点」または「部隊(の隊長)」を「アクター」で設定することが考えられます。後者の場合、部隊の種類(歩兵、騎兵、弓兵など)によって「職業」が変わるようにしておけば、能力値が変わります。また、HPを「兵力」、MPを「士気」などにしてMPを消費することで計略や強力なコマンドが使えるようにしておけば、RPGツクールのデフォルトの戦闘システムを利用して戦闘モードとすることもできます。これなら兵科ごとの相性や特殊コマンドなど、色々と設定することができるので便利です。しかし、問題は3以上の勢力が存在するようなゲームにした場合、必ずプレイヤーが関係しない戦闘が発生するので、その場合の戦闘をどのように処理するかなのですが……。このあたりのルール・処理が固まれば、サンプルゲームを作れそうな気がします。

ただし、「アクター」を利用する場合に注意が必要なのは、能力値の上限で

  • HPは9999
  • TPは100
  • 他は999

が限界になっています。一般的な「変数」の方は±99999999が上限と下限、「所持金」は0~99999999までとなっています。状況に合わせて使い分けるのがよいでしょう。
そして、「変数」を利用する場合は探しやすいような並び順にするのをお忘れなく。

これぐらいが固まってから、実際にPCでの作業をした方がよかったと思います。風呂田の冒険はあまり深く考えずに作り出したので結構大変でした(笑)。本格的なシミュレーションゲームを作る場合には、いくつか試作品を用意して、テストプレイをしたうえで本格的に開発するのがいいですね。そうです、それをしなかった私はバカですw

長くなってきたので今回はこの辺りで失礼いたします。それでは!

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

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

(無)青島製菓 2022/08/22 21:04

RPGツクールでのシミュレーションゲーム制作 Vol.1 マップ編

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

今回からしばらくRPGツクールを使ったシミュレーションゲームの制作についていろいろと書いていこうと思います。前回公開した「トレーダーでおまっ!」(以下本作)を題材に解説をしたり、やってみたいアイディアを書いていくつもりです。自分自身の備忘録やアイディアの整理を兼ねていますが、よろしければご参考に。(自分が使っているのはMZです)
一応、RPGツクールを触ったことがない人にもわかるように書いたつもりですが、少し説明を端折っている個所もありますのでご了承ください。

マップモードを作ろう!


というわけで、まずはマップについての解説です。
しかしRPGツクールシリーズをご存じの方は、疑問に思うはず。
「わざわざマップを作る必要ある?」
詳しくはツクール公式サイトで配布している体験版などを触っていただければ分かると思いますが、ツクールシリーズは(自分で通路や施設のレイアウトをデザインはしなければなりませんが)デフォルトの素材でマップを制作し、いくつか設定をすれば、そのままプレイヤーキャラがマップ内を動くことができるゲームを作ることができます。
しかし問題は、デフォルトの設定のままだと「マップ画面では自分で操作しなければならない」のです。すごろくを思い浮かべていただければよいかと思いますが、コマがマス目を無視してボード上を自由に動くことができるとゲームにならないので、今回はその点をどのように作るかの説明です。
これを利用するとどのようなゲームが作れるかというと、
  • 桃鉄やマリオパーティーのようなすごろく系のボードゲーム(ただし一人用w)
  • コーエーの三国志シリーズのような戦略シミュレーション
  • フィールド上のいくつかのポイントを自動で移動し、町やダンジョンの中では別のシステムに切り替わる(例:ファイナルファンタジータクティクス)

といったところでしょうか。通常のRPGでもフィールドを移動する時に、選択肢を表示した後ただ場面が切り替わるだけでなく、何か演出をしたり、イベントを発生させることができるようになります。特に本作では、戦闘の開始前に逃げるかどうかの確認を行い、逃走に失敗した場合は逃走不可能になるという仕組みにしていますが、ツクールのデフォルトのエンカウントシステムだとこれはできません。また、相手によって逃走成功率などを細かく調整することが可能です。さらに、組み合わせれば、アクションゲームの要素を追加することもできるので(制作は大変ですが)、どのようなゲームにするかはアイディア次第です。

まずはマップを作ろう

マップ自体はまず作らなければなりませんが、これは省略です(笑)
多少の融通は利きますが、後から設定し直すのは大変なので、先に作ってしまうことをおススメします。ちなみに、本作の宇宙マップはすべて通行不可の透明なタイル(パーツ)で、背景として宇宙空間のイラストを表示させています。

マップ画面での設定

まず下が実際の本作のツクールでの制作画面です。(公開用に中継地点のみ再配置ですが、位置は適当です💦)

やり方は色々とあると思いますが、今回紹介するのは
「イベントでプレイヤーキャラクターの移動を指定」方式です。

まず用意するのが、
①プレイヤーの現在地を格納する変数
②プレイヤーの目的地を格納する変数
です。
本作では①青②緑③赤④黄の4つの星の間を行ったり来たりしながら交易をするのですが、それぞれの星に1から4の数字を割り振っています。その上で、

①ゲーム開始時の初期位置を設定
       ↓
②移動先の目的地を選択
       ↓
③プレイヤーを強○的に移動
       ↓
④途中イベントがあれば発生
       ↓
⑤ ③④を繰り返し目的地に到着


というのがおよその流れです。

ゲーム開始時

ゲーム開始時のイベントなどで「現在地」の変数に設定を入れておきます。本作では「1」です。目的地は、この段階では何もしなくてOKです。

目的地選択

左がゲーム上に表示される画面、右がツクール内で実行されるコマンドです(実際には、これはそれぞれの惑星の中で行われていますが)。それほどたいしたことではありませんが、流れを説明すると、

①現在地ごとに条件を分ける
②マップ上に表示される現在地の場所に移動
③その場所ごとに移動先の選択肢を表示
④選択した目的地に対応する数値を「目的地」の変数に代入

ということをしていますいちいち設定するの面倒くさい。まあ、デジタルゲームの利点として、同じような構造の部分はコピペで簡単に量産できますし、場所を変更したい場合もカットアンドペーストですぐに修正できますから、慣れれば案外楽です。
条件をいくつか設定すれば、ストーリー進行などに合わせて隠しダンジョンに進めるようにすることもできます。

プレイヤーの強○移動&途中のイベント

マップ上で設定している画面です。「現在地」と「目的地」ごとに条件を分けて移動ルートを設定してあります。プレイヤーの操作に関係なく、強○的にプレイヤーキャラを動かしています。先ほどの制作画面上で「中継地点」というものを置いていたのは、この移動を行う時の目印で実際には空イベントです。当初は中継地点の上にプレイヤーキャラが到達した際に、中継地点の中で設定したイベントが起こるようにしていたのですが、ツクール側が強○的にイベントを踏ませた場合は何も起こらない仕様だったので、移動中の処理は専用のイベントで発生させています。
移動の間に入っているコモンイベント(共通処理)の「ターン終了処理」と「遭遇イベント」は、本作ではそれぞれ、「燃費分の燃料の消費と各地の相場の変動」、「乱数を利用した戦闘イベントなどの発生」を実行しています。
ちなみに、その間にある部分は「燃料切れが起きた時のゲームオーバーイベント」の処理で、もともとは「ターン終了処理」の中に入れていたものでした。しかし、コモンイベントとして処理をしてしまうと、マップが暗転したまま動かなくなってしまうので(おそらく、その後に続くプレイヤーキャラの移動処理を続けてしまっていたのでしょう)現在の場所に配置しています。また、「遭遇イベント」内には「隕石にぶつかって耐久値が0になった時にゲームオーバー」というものも入れてあります。


これは、プレイヤーが戦闘不能になることを許可していたからなのか、マップが切り替わった瞬間に何の演出もなくゲームオーバーになってしまっていたので、それへの対処です。コマンドの配置している場所を少し変えてやると、こちらの意図していたものとは全く違う挙動になったりするので、この辺りは丁寧に動作チェックをする必要があります。

以上のような設定を必要な分だけ作ってやれば「移動先を選択すると、プレイヤーキャラがマップ上を自動的に移動する仕組み」が出来上がります。

応用編:三国志シリーズ風の戦略シミュレーションの拠点画面


上は本作でのショップ画面のものです。上部に現在のステータスが表示されています。これはRPGツクールMZの公式プラグイン(拡張機能)の「ExtraWindow」というものを利用しています。詳細は省きますが、これを併用することで、三国志シリーズ風の戦略シミュレーションの拠点画面、正確には拠点のパラメータやコマンドを表示させつつ、拠点を切り替える、ということができそうです。例えば、
①マップはキャラがほとんど移動できない設定にしておく
②プレイヤーキャラは透明化
③特定の操作(例えばコントローラーのLやR、キーボードのQやWを押す)をした時に「現在地」の変数を変化させ、変化した「現在地」に対応する各種パラメーターの値をステータス部分に表示させる変数に代入
④プレイヤーキャラを移動(対象となる拠点の場所に暗転処理をなしにして直接移動、あるいは移動速度を高速化&すり抜け状態にしてプレイヤーキャラを移動)

このようなやり方で実現できそうです。戦略シミュレーションにする場合、RPGツクールで戦闘をどのように行うか、というのがまた別の問題となりますが、ターン制ならばたぶんできるのではないかと。(頑張ればリアルタイムでも出来るかもしれません)
また、通常のRPGでも地図から移動先を選ぶ場合、プレイヤーの現在位置のシンボルを表示させつつ、移動先の情報を出すこともできそうです。


長くなってしまいましたが、色々とやってみたいことはあるので、少しずつ書いていこうと思います。今回はこの辺りで失礼いたします。それでは!

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

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

月別アーカイブ

限定特典から探す

記事を検索