【目標】 敵が全て表示された直後に、敵の種類ごとに数を調べメッセージ表示する 参考:戦闘中にイベント発生 >> 例 << ○○○ が 3体 あらわれた! △△△ が 2体 あらわれた!
【見本】 |
【1】 コモンイベント一覧から 203:○[変更可]戦闘開始時処理 を選択します。 |
【2】 203:○[変更可]戦闘開始時処理 が 呼び出された段階で、表示された敵は全て 可変DB_10:×┏ 戦闘一時ステータス[基] に データが格納されているので そのDBから必要な値を読み込みます。 |
【3】 まずは敵のキャラクタ番号を DBから読み込みますが。 同じ敵かどうか1個ずつチェックするのは面倒です。 そこでループ処理で楽をしてしまいましょう。 ループの準備をします。 1、イベントコマンド一覧 から 変数操作 を選択 2、少し上にあるSelf を選択し、このコモンセルフ10 を選択 3、=(代入) を選択 4、9 + 0 を入力します 【2】の画像の敵1ステータスの1個少ない数にしましょう ループ内の一番最初に +1 され 10になるので問題はありません 5、入力 を 左クリック し追加しましょう |
【4】 次にループ処理を入れます ループ回数は敵の最大数である7を入力します。 1、イベントコマンド一覧 から イベント制御を選択 2、回数付きループ にチェックをし、7 を入力 3、さきほど入力した CSelf10 = 9 + 0 の1個下の行に追加 [ 3 ] を参考に変数操作を行い CSelf10 += 1 + 0 を ループ内 に追加。 CSelf10は可変DB_10:×┏ 戦闘一時ステータス[基]の データ位置を保存しておく役割です これでループの準備は終了です。 |
【8】 それでは、用意したDBを使用し 出現した敵の情報を保存していきましょう。 1、19999 以下 の分岐内に CSelf12 = -1 + 0 を追加 CSelf12は、用意したDBのデータ位置保存用の変数。 2、回数7回 の 回数付きループを追加 敵の最大出現可能数である7回を設定する。 3、2、の ループ内に移動しCSelf12 += 1 + 0 を追加 データ位置をループの度に+1させていくため。 4、DB操作で × お店一時処理用 の CSelf12 の 価格 を CSelf13 にコピー ※ 今回使った× お店一時処理用は、データの初期化した場合 ※ 全データの価格の項目の値は全て 初期値の 0 になるので ※ その値とキャラクタ番号を条件に次の行で分岐をさせる。 5、CSelf13 が 0 と同じ 場合と CSelf13 が CSelf11 と同じ 場合で条件分岐 初期値が-1なら-1と同じに、-5なら-5と同じに設定する。 ※ 今回は敵だけの調査なので ※ -1か10000〜19999の値しか出ないので ※ 初期値が 0 でも問題がない。 ※ これが味方キャラも捜査する場合だと ※ 必ず初期値を-1以下にしなければならない ※ 0だと主人公ステータス 0 のキャラと一致する可能性があるので。 6、CSelf13 が 0 と同じ 場合の分岐内でDB操作 × お店一時処理用 の CSelf12 の 価格 = CSelf11 ついでに 所持数も += 1 する ※ 0(初期値)の場合はまっさらな状態なので ※ 敵キャラクタ番号を登録し、出現数にあたる項目も +1 する ※ 出現数は初期値0なので、これで登録と同時に1体となる。 7、CSelf13 が CSelf11 と同じ 場合の分岐内でDB操作 × お店一時処理用 の CSelf12 の 所持数 += 1 ※ こちらは単純にDBに登録されていた敵キャラクタ番号と ※ 今回読み込んだ位置の敵キャラクタ番号が一致したので ※ 出現数を +1 するだけでいい。 ※ どちらにも一致しなかった場合は次のループへ |
【10】 いよいよ出現した敵の名前を表示します。 一番最初のループを抜けた次の行から追加していきます。 |
【11】 まずは使用する文字列変数と 敵の種類数をカウントする変数 DBのデータ読み込み位置用変数 の値を設定します。 CSelf5に何も文字を入力していない空欄を入れてみましょう 1、イベントコマンド一覧 から 文字列操作 を選択 2、文字列を選択し、コモンセルフ5 を指定 3、=(代入) を選択 4、空欄です、改行してもいけませんし空白を入れてもいけません ここで何か文字を入れると、1行目の表示が変化してしまうから。 最後に入力を押せばOKです 同じようにCSelf6も空欄の文字列を入れてみましょう。 変数の用途ですが文字列変数の CSelf5 と CSelf6 は 出現した敵の種類名と数と、出現したときの文を表示させる用です。 用意したDBのデータ読み込み位置用として CSelf10 敵の種類数をカウントする用として CSelf11 を使用 CSelf10 = -1 + 0 CSelf11 = 0 + 0 をいれておきましょう |
【14】 【11】〜【13】までの処理の解説 敵の出現最大数の7回ループを行い そのループ中に、DBに登録した敵キャラクタ番号を取得。 キャラクタ番号が0(項目の初期値)以外なら登録されているので 分岐でキャラクタ番号が初期値の場合はループを抜けるようにしている 0以外だった場合はCSelf11(敵の種類数のカウント用変数)を+1し 出現数をCSelf13に読み込んでいる キャラクタ番号のキャラクタ名をUDBの敵固体データから読み込み。 敵の種類数が4以下の場合と7以下の場合で分岐 ※ 実際は1〜4、5〜7の分岐となる 4以下の場合はCSelf5へ、敵キャラクタ名と出現数を加算(+=)し 7以下の場合はCSelf6へ加算している 後に文章の表示によって、敵の名前等をメッセージ表示させるが そのとき基本サイズのフォントの大きさだと 4行までしか表示できないので 5種類目以降はCSelf6になり、2回文章の表示を行う。 |
【16】 それでは戦闘を行ってどうなったか確認してみましょう ◆バトルを発生させたいを参考にして てきとうな相手との戦闘を発生させてみてください。 敵が全て表示されたあとに 敵のキャラ名と出現数を文字列で表示されましたか? されていれば成功です。 >>> うまくいかない場合の可能性 <<< 1、DBのデータ読み込み位置が間違っている 2、ループ回数が間違っている 3、項目の初期値と条件分岐に使う初期値の値が違う 4、指定するコモンセルフ変数の間違い 5、キャラクタ番号を%=10000し忘れている 6、文字列変数の最後に\n(改行文字)を入れ忘れている |
【17】 文字列に特種文字の 【文字の性質変化】や【文字表示の制御】などを使うと、演出の幅が広がりますね。 また文字表示の分岐の終わりにウェイトをいくらかいれると 戦う、逃げるの選択肢が出るまでの間を調整できます。 無事処理が上手く動いた人もダメだった人もお疲れ様でした。 |
<執筆者:きじこ>