いのすけのウディタ改造録

ウディタの基本システムを改造してみた記録です。

【ウディタ】敵専用のザオリクを作ってみる

こんにちは、いのすけです。

 

ウディタでゲームを作っていて気になった点の一つが、「味方の蘇生技(ザオリク)は戦闘不能を解除&回復で簡単に作れるけど、これを敵に使わせても味方を蘇生できない」という点でした!

今回は敵がちゃんと味方一体を蘇生するような技能を作りたいと思います!

①ユーザーDBの技能で敵用のザオリクを味方用とは別に用意

f:id:inosukeT:20220319174500p:plain

敵用の蘇生技です。余計な特技いっぱいでごちゃごちゃしててすみません💦

私の作っているゲームでは、蘇生(resuscitation)から、リーサスという名前にしています。

で、この技能を作るときに大事なのが、効果対象を「イベント呼出[バトルのみ]」にしておくということと、呼び出すコモン名ですね。下の「イベント番号指定」というところですが、コモンイベント上で蘇生処理を行うので、そのコモンの番号を設定してあげる必要があります。今回はコモンイベント232で蘇生処理をしているので、500000+(コモンイベント番号)で500232と入力しています。これは指定のコモンイベントを呼び出すための特殊な番号です。いくつかこういう数字がありますが、今はとりあえずこれだけ覚えておきましょう。

 

②バトル開始時の敵のIDを通常変数に格納

ここまで書いてきてあれなんですが、実は敵を蘇生させる処理というのはちょっと無理でした💦

じゃあもうこの記事も終わりかよ、というわけではないんです!私が考えたのは、バトル中に敵を追加するコモンが存在する(コモン29ですね。)ということは、「バトル開始時に、どの位置にどんな敵がいたかを覚えさせておいて、そこに欠員がいる場合に、その位置に覚えておいたキャラを追加させれば、あたかも蘇生したのと同じ結果を出せるのではないか!」というわけです!

というわけで、システムDBの通常変数に格納しましょう。通常変数はどのコモンでも共通の値で使えるので便利ですね。まずは敵の最大匹数分(7匹)の通常変数に名前を付けておきましょう。

f:id:inosukeT:20220319180916p:plain

通常変数7個に名前を付けました。ここに敵キャラのIDが入るようにします。

また、コモンイベント203はバトル開始時に行う処理を好きに入れられる場所なので、ここに先ほどの通常変数に敵キャラIDを格納する処理を作ってやりましょう。

f:id:inosukeT:20220319181354p:plain

通常変数に格納していきます。下の青色のは今回関係ありません。

このスロットとはなんぞやという話ですが、これは、バトルでの処理での敵味方の位置を決めている番号です。

f:id:inosukeT:20220319200637p:plain

戦闘一時ステータスです。表のとおり、スロット番号が0~9が味方、10~が敵です。

戦闘での敵味方の情報はこの可変データベースというところに格納されていて、上の画像にもありますが、戦闘スロットの数字で味方と敵を分けています。そのためCSelf10の値を10から始めて、CSelf11にそのスロットのキャラIDを取得させています。3行目で10000引いているのは、コモン141で取得される敵キャラは、10000+敵キャラIDで出てくるからです。その敵キャラIDを①で作った通常変数に格納したいわけですが、スロット10のキャラは通常変数50に、スロット11のキャラは通常変数51に、というように格納されてほしいので、スロット番号に2000040を足して、この番号の通常変数を呼び出すことで(2000000+YでY番の通常変数を呼べます。)これを、スロット10~16までの7回繰り返せば、7つの変数すべてに敵キャラIDが格納されます。

ちなみに、バトル開始時に敵がいないスロットは、キャラIDとして-1が出力されるので、そのスロットの通常変数には-10001が格納されています。

 

③敵用のザオリクで呼び出すイベントを作成

①で作った技能でコモンイベント232を呼び出すことにしていたので、コモン232をいじっていきましょう!大きく分けて2つの処理に分かれるので、2つに分けて処理します。

(ア)バトル開始時にはいたのに、ザオリクを使用しようとするタイミングで生きていないキャラがいれば、その場所に同じモンスターを呼び出す処理

f:id:inosukeT:20220319203648p:plain

コモンイベント232のうち、(ア)の処理の部分です。

f:id:inosukeT:20220319203900p:plain

(ア)の処理は「ループここまで」のところまでです。

CSelf0にザオリクを使用したスロットを取得させ、CSelf1に発動者IDを、CSelf5に使用スロットのキャラ名を入れています。CSelf5~CSelf9は文字を入れる変数となっています。それ以外のセルフ変数には数字しか入れられない設定になっています。

敵スロットの番号10~16でそれぞれ通常変数50~56が0未満(要は-10001で該当スロットにはバトル開始時誰もいなかったということ)である場合と、CSelf21に該当スロットのキャラが戦闘不能であるかを取得させ、これが0である(戦闘不能なら1、戦闘不能でないなら0が代入されているので、要は生きているということ)場合は、ループ開始に戻し、次のスロットを判定させています。この両方に該当しない場合というのは、「戦闘開始時にはいたが、技能使用時には死亡している場合」であり、この場合にその戦闘スロットに通常変数のキャラを追加する処理をしています。戦闘スロット番号と敵キャラ追加のコモンイベント29の追加位置の数字がずれているので10引いて合わせています。

追加するだけだと演出もメッセージもなく寂しいので、メッセージ「¥cself[5]はザオリクを唱えた!」(私のゲームだとリーサス)と、蘇生の演出を蘇生するスロットに表示させています。演出の位置はCSelf30とCSelf31でスロットごとに決めています。この数値は、コモンイベント175からコピペしただけなので、真似するときはこの値を完全コピーで問題ありません。あと、回復ポップアップも入れています。蘇生させたキャラの最大HPを取得してそれを表示させているだけです。ゲージも更新させて、ちゃんと蘇生した感が出るようにしています。

 

(イ)蘇生対象がいなかった場合の挙動

(ア)の処理の中で、一時変数Bって何の説明もしないけど何これ!?っていう風に思われたかもしれませんが、実はスロットごとに蘇生対象でなかった場合に1ずつ加算していって、ループを抜けてこれが7だった場合に蘇生対象がいなかったという、判定になるようにしています。要するに蘇生可能でないスロット数を数え上げていただけですね笑

敵AIの行動選択条件をいじってもよかったのですが、今回は、こっちのコモンで蘇生対象がいない場合の処理もしちゃいました。

攻撃技は自分で組むと耐性や狙われ度などさすがに面倒くさすぎるので、「ようすをうかがう(無駄行動。不敵に笑っている!とかでもいいです。)」と「反撃の構え(カウンター技です。防御とかでもいいと思います。)」と「漆黒の守り(無属性ダメージを受けないような状態にする効果です。)」にしています。さいころと名付けた変数は0~2の値のいずれかをランダムで出力していてこの値に応じて行動を一つ決めています。ここは好みで変えてください。反撃の状態設定などは今回の本題ではないので割愛します。

 

ここまで書いてて敵行動AIで死亡者がいないか判断させる方がいいような気がしてきました…orz

 

動作はこんな感じです。

f:id:inosukeT:20220319215807p:plain

蘇生の必要がないターンでは3つの動作のうちの一つを行います。

f:id:inosukeT:20220319215902p:plain

蘇生できるキャラがいる場合は蘇生します。番号が若いスロットから優先して蘇生します。

f:id:inosukeT:20220319220337p:plain

ポップアップもちゃんと表示されています。蘇生されたキャラの最大HPは4です。

うまく使えば、左手が頻繁にザオリクして顔を蘇生してきた某魔王様の動きも再現できそうですね!ボス戦でこの技を使わせてプレイヤーを絶望のどん底へ落としてやりましょう!

 

では今回はこの辺で。