【ウディタ講座】SRPGをつくろう! マップ切り替え時の敵ユニット登録・設置

前回まででユニットの管理や表示も固まってきました。

そろそろマップ切り替え(ステージ進行)時に敵ユニットを設置する仕組みを作っていきましょう。

今なら、各種CDBに数値を入れてユニットのピクチャ表示コモンを呼び出せば、ほとんどの処理が済むはずです。

デバッグ用にマップを行き来する処理を用意する

ふたつのマップを行き来するように

ふたつめのマップを作り、仮に右クリックのメニューでマップ移動をできるようにしましょう。

前回記事から引き続きキャラが二重になっていますが、この記事中に解決します。

この選択肢あたりのソースはこんな感じ。

 

最後に、長らくゲーム開始時のユニット仮配置として動かしていたマップイベントを消去しましょう(起動条件を「決定キー」にするだけでもOK)。

筆者の場合は、こんなやつを使っていました。勝手に動かないように変更します。他にもイベントが残っていたら、消去するか不透明度ゼロにするなどしておいてください。

 

マップ移動直後に「ステージ設定」コモンが起動するように

止めた仮処理の代わりに、正式なステージ開始用の自動開始型マップイベントを設置しましょう。

各マップにこんなイベントが1つあり、以降の処理はほとんどコモンイベントの中だけでまかなっていきます。

 

ここまでで、こんな感じに動くようになりました。

新設コモンにして本記事の眼目である「★ステージ設定」コモンでは、やることは無数にありますが、まずは「敵軍・友軍の設置」と「自軍の設置」までをさせてみましょう。

上のGIFのマップ切り替えに合わせて、それぞれ違った様子に各種ユニットが設置されるようになったら成功です。

MEMO

ステージの開始時とクリア時にシナリオ(会話イベント等)を挟むなら、「操作受付」コモンの前と後にそれぞれシナリオ用のコモン(処理)を置くことになります。

敵軍・友軍を設置する

専用のUDBを用意する

「ステージ設定」コモン内の「敵軍・友軍設置パート」で、「敵軍・友軍のリスト」をもとにユニットを生成・配置してくれる……というのがベストでしょう。

「敵軍・友軍のリスト」となるUDBを、こんな感じに作ります。

あとは必要に応じて所持品や習得スキルなど(アイテム・アビリティ)。

矢印はデータベースとほかの要素との対応関係を示したものです(実際の数値とちょっとズレていても気にせずに……)。

 

これも様々なやり方があるとは思いますが、筆者はものぐさなので本記事では「1つのUDBですべてのステージぶんの敵軍・友軍のユニットの情報をまかなう」方式を執りました。

データ数がかなり縦に長くなるぶん、あとあとの差し替えなどは容易です(Ctrl+Shift+F6でのデータ挿入などが便利)。

また、これは初期配置ですから処理負荷もそう気にすることはありません。マップ切り替えの前後なら、暗転をかけておけば1,2秒ぐらい意識せずに待てるはず。

MEMO

さしあたり、「登場ターン0」のユニットを初期配置の対象としています。

「登場ターン」がそれ以上のユニットは、初期配置では登録されません。後々「援軍」として現れる処理の設置を見越した項目です。

 

ちなみに、ウディタSRPGの先達『フェアリーズエメラルド』での設定方法がうかがえるスクショがコチラに。


参考
敵のAIゲーム製作記録

UDBを読み取ってユニットをCDB登録するコモン

上記のUDB設定を読み取って、各種CDBにユニットを登録するコモンを実作していきましょう。

上のコモンは、呼び出し時の入力値で対象の「登場ターン数」を指定できるようにしています。将来的に必要となるであろう「増援」でも使いまわせる組み方が理想的ですね。

ここでのチェック項目を増やせば「ハードモードでだけ追加登場するユニット」なんかも作れそう。

MEMO

敵軍配置UDBの空欄(読み込まないデータの行)は、登場ターンやステージを「-1」にしておくとよいでしょう。

 

さて、いま登録すべきUDB内のデータを見つけたら、個別に専用コモンへ送ります。

そういえば「201~299の範囲の空いているユニット番号をさがす」ような動作が必要になりますね。他処理でも流用できるように作っておきましょう。

「┃┣指定軍の空きNo検索」コモン

要領としては「生存者カウントの“逆”」ですね。HPもなく出撃フラグも立っていない場所をさがす動きをします。

 

元に戻って、「┃┗UDBから指定IDのCDB登録」コモン

おっと!

コモンづくりの途中ですが、そういえばユニットのHPや攻撃力など能力値(パラメータ)の指定をしていませんでした。

 

しかし、1ステージごとに10体20体といるユニットのすべてに、毎回HP・力・技術・素早さ……と無数の数値設定をしていくのは気が遠くなる作業です。さらにFEライクなSRPGならば、ユニットのレベルアップ(ステータス成長)は成長率によるランダム。

成長率のゆらぎも加味するのかどうかで悩むとなると、ちょっとやってられない作業量ですね。

初期配置時の能力値については、多少ラクをしてもよいでしょう。

「期待値」を使うことで「レベルとクラス」さえ指定してあれば、能力値が計算できてしまいます。

SRPGでは重要な数学知識「期待値」

たとえばFE系の攻略サイトなどでは、次のような計算で「このユニットは、ランダム成長でも大体このぐらいの能力になるであろう」という数値化を行っています。


参考
ユニット/パラメータ期待値かわき茶亭

基本クラス・レベル20での期待値=初期パラメータ+パラメータ成長率×(20−初期レベル)
上級クラス・レベル20での期待値=上式の値+クラスチェンジによるパラメータ変化+パラメータ成長率×(20−1)

他のページも踏まえると、「Lv1で登場する初期HPが18で、その成長率が80%のユニット」は「Lv20のとき、HPが33.2」になります。

つまりこう。

  • 期待値33.2 = 初期HP18+(HP成長率80%×(20-初期Lv1))
  • 80%とは0.8なので…… 33.2 = 18+(0.8×19)

ウディタは小数を扱えませんので、「×0.8」は「×成長率%÷100」と表現しなおします。

つまり、あるユニットがレベルNのときの各種能力値(期待値)は次の式に。

期待値=初期パラメータ+((N-1)×成長率÷100)

というわけで、クラスのUDBもこのように項目を埋めていきます。

また、必要に応じて、各パラメータの上限値や、クラスごとのレベル上限などの項目を足していきましょう。

これで、クラスとレベルさえわかれば能力値が自動で計算できるようになりました。

なお、各ユニットが自由に兵種を変えられる仕様なら、キャラIDの方にも成長率を設定し、クラスの成長率と合算する必要もあるので注意です。

コモン化してみましょう。

ごく短い処理ですね。

データベースに各種設定をきれいにならべておけば、「初期値のIDから+9した場所がその成長率」といった規則が自然と生まれます。

 

また、特別にステータスをいじりたいユニット(期待値以外の結果を設定したいケース)は、初期配置後にマップごとに特別な手打ちの調整を加えればよいでしょう(ステージ開始時の会話イベントのついでなどで)

MEMO

「クラスチェンジによるパラメータ変化」の部分は、たとえば下級クラスの剣士と上級クラスのソードマスターの「初期パラメータの差」などから求めてくるとラクかもしれません。

 

というわけで、先の登録コモンの続きはこんな感じに。

できあがり

これで敵軍・友軍については配置してくれるようになりました(仮にすべてスライムで)。

クラスUDBの能力値やキャラ画像の設定漏れ、配置UDBの座標やクラスの指定忘れなどにご注意を(よくすっぽ抜けます)。

能力値の登録がうまくいっているかの確認もするなら、ユニットのステータス表示の処理をもうちょっと作り進めておきましょう。

自軍を設置する

自軍の場合は事情が違う

「敵軍・友軍用の」と言いつつ、上記のコモンは自軍設定にしても動くように作っておりました。

ゲーム開始時の初期メンバー登録だとか、イベントでステージ開始直後に追加される新キャラについてはこの方式で登録してしまって問題ありません。

それ以外の自軍の設置については、少しやり方を変える必要があります。

 

FEライクならば、戦闘前の準備である「編成」パートが解禁されてからは、自軍の配置についてはこのような特徴が出てくるからです。

  • 自軍の初期エリアが決まっており、出撃メンバーやその位置を自由に入れ替え可
  • 出撃枠の上限いっぱいにユニットを出さなくてもいい(12枠中8人で出撃するなど)

「編成」パート作成には至っていませんので、まずは初期配置先となるマスに、自軍のユニット番号の若いユニットを並べるところまでを作ります。

新規ゲーム開始直後のみ「自軍初期登録」を行う

おおげさな言い方をしていますが、ゲーム開始時のマップ(本記事ならマップ0番)では自軍も上の敵軍・友軍とおなじ要領で設定してよさそう、というお話(敵配置UDBから自軍も登録)。

今は仮にマップ0~1を行き来できるようにしていますが、基本的にはFEライクでは0,1,2,3……とマップの進みは一方通行か、クリア済マップへの再訪はできないようになっていますので。

稼ぎ用のフリーマップなどがある場合も、そのマップで敵配置UDBからの自軍登録を行わないように気を付けるだけですね。

ステージごとの初期配置位置リストUDBを用意する

2つめ以降のマップ(本記事のマップ1番)以降、自軍の配置はやり方が変わってきます。

こんな感じ。

”4/5”などは、座標(x,y)と同じ意味。文字列変数でひとまとめに扱って、適当な記号でxとyを区切っています。視認性を気にしないなら、「x(改行)y」の2行の記入でもOK(どちらにしてもココが空欄だと座標は(0,0)扱いされます)。

上にある初期配置マスから、自軍ユニットを101番から順にチェックし、出撃設定ならそのマスに配置……というのを、出撃数の上限いっぱいまで繰り返します。

マップ0番など、この初期配置コモンを動かしたくない場合は「出撃数上限」を0にしておけば、なにもせず終わってくれます(回数0の回数ループはなにもしません)。

できあがり

当然ながら、マップ1からマップ0へ戻るとおかしなことになりますのでご注意を。

 

参考書籍

期待値のおさらいが上で必要になった他、自軍ユニットの編成時の初期配置の交換ではくるっとユニット同士を円運動で入れ替える演出を入れたくなるかもしれません。

円運動をやるには三角関数が必要。学生時代に苦手だったものが再来したわけですが、ゲーム作りのためとなれば意気込みも違います。

今になってこういう本がおもしろくなるというのも、ゲーム作りの醍醐味ですね。

 

また、具体的なユニットの配置や能力値、計算式の設定に入ってきたことで、SRPGそのものの参考書も欲しくなってくるころ。

計算式や数値関係の情報はネット上の攻略サイトでも揃いますが、テキストや画像資料が豊富な攻略本を持っておくと、マップ作りやシナリオ、キャラの構想などでも大いにインスピレーションを刺激してくれることでしょう。

 

 

【ウディタ講座】SRPGをつくろう! まとめ