RPGツクールと数学のブログ

RPGツクールと数学についてのブログです。

アクションRPGの基礎(RPG2000)(7/7)

前回で敵を倒す処理まで完成しましたので、完全に消滅させましょう。完全に消滅させる処理は敵イベントの3ページ目に作るので、2ページ目を呼び出したあと3ページ目を呼び出す処理を追加します。

コモンイベント「ダメージを与える処理」

◆変数の操作:[0003:イベントページ]代入,2
◆変数の操作:[0010:敵番号]代入,7
◆繰り返し処理
 ◆変数の操作:[0002:対象者]代入,変数[V[0010]]の値
 ◆条件分岐:変数[0002:対象者]が0以外
  ◆イベントの呼び出し:V[2][V[3]]
  ◆
 :分岐終了
 ◆変数の操作:[0010:敵番号]加算,1
 ◆条件分岐:変数[0010:敵番号]が9より大きい
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆
:以上繰り返し
◆指定動作の全実行
◇変数の操作:[0003:イベントページ]代入,3 【←注意】
◇変数の操作:[0010:敵番号]代入,7
◇繰り返し処理
 ◇変数の操作:[0002:対象者]代入,変数[V[0010]]の値
 ◇条件分岐:変数[0002:対象者]が0以外
  ◇イベントの呼び出し:V[2][V[3]]
  ◇
 :分岐終了
 ◇変数の操作:[0010:敵番号]加算,1
 ◇条件分岐:変数[0010:敵番号]が9より大きい
  ◇繰り返し処理の中断
  ◇
 :分岐終了
 ◇
:以上繰り返し

↑◇の行を追加します。「指定動作の全実行」以外の前回分をコピーして、イベントページの値を2からにすればいいだけです。

2ページ目で呼び出した段階で倒しきれなかった敵は対象者リストから外れますから、3ページ目では消滅していく敵しか呼び出されないようになります。そのため、このように使い回しが可能です。

肝心の敵3ページ目では何をすればいいかというと、
敵を(000,000)に移動させて消去するだけです。

敵3ページ目

◆イベントの位置を設定:このイベント,(000,000)
◆イベントの一時消去

これでおしまい。お疲れ様でした。おわっちゃったよ。

実際に敵を複製して、倒せるかどうかご確認ください。倒れた敵は消滅し、マップを離れない限り復活しません^^

敵4ページ目は敵に触れたときの処理ですので、触れてダメージを受ける、などという処理を作るときにご活用ください。例えばこんなかんじ。

敵4ページ目(開始条件:イベントから触れたとき)

◆条件分岐:決定キーでこのイベントを開始した
 ◆イベント処理の中断
 ◆
:分岐終了
◆効果音の演奏:しびれ2
◆キャラクターのフラッシュ:主人公,0.5秒(赤31緑0青0強さ31ウェイトなし)
◆キャラクターの動作指定:主人公,ジャンプ開始,180度方向転換,一歩前進,ジャンプ終了
◆HPの増減:メンバー全員のHPを5減らす

この内容こそ自由なので、好き勝手にしてOKです。ここで、わざわざ決定キーで開始の場合実行しないようにしているのは、剣を振るとき決定キーを押すように設定した場合、剣を振るつもりが敵に話しかけたと認識されてダメージを受けてしまうという事態がまれにあるので、それを防ぐためです。

また、イベント「技」はいま開始条件を「自動的に始まる」にしていますが、「定期的に並列処理」にすると、動きながらの攻撃が可能になります。ただしその場合、出現条件になっているスイッチ「剣を振る」がOFFになった瞬間にイベントが終了してしまうので、最後にOFFする必要があります。

イベント「技」3ページ

   …
   …
◆指定動作の全実行
◆イベントの呼び出し:ダメージを与える処理
◇スイッチの操作:[0005:キー入力受付]をONにする
◇スイッチの操作:[0001:剣を振る]をOFFにする

↑◇の行を入れ替えるだけ。自動的に始まるのときは別にどっちの順番でも関係ないのですが、定期的に並列処理のときは出現条件を最後にOFFする必要があります。

こうすると、歩きながら剣を振り、ダメージを与えることも可能です。ただし、消滅していく間は剣が振れないことに注意です。振れるようにするにはちょっとまた細工しなければなりません。

別マップへ移動するときは、敵のダメージ量の初期化が必要です。なので、マップ移動するたびに変数21番~100番を0にしなければなりません。その処理をコモンイベントで作ってしまえばマップ移動のたびに呼び出せばいいだけですが、それすら面倒な場合、このようにすることも可能です。

コモンイベント「初期化」(開始条件:定期的に並列処理)

◆変数の操作:[0013:マップID]代入,主人公のマップID
◆条件分岐:変数[0013]がV[0014]以外
 ◆変数の操作:[0014:元マップID]代入,変数[0013]の値
 ◆変数の操作:[0021~0100]代入,0
 ◆スイッチ操作:[0005:キー入力受付]をONにする
 ◆スイッチの操作:[0001:剣を振る]をOFFにする
:分岐終了

↑変数14番「元マップID」にはじめ0が代入されており、変数13番にマップIDが入るので、変数13番と14番の値が違うので、条件の中に入ります。そのとき、変数14番に変数13番の値が入り、等しくなります。ここで初期化を行います。

変数21番~100番に0を代入し、念のためキー入力受付のON、剣を振るのOFFをします。マップを離れない間は変数13番で取得されるマップIDは変数14番と同じなので、条件を満たさず、初期化が行われません。マップを離れるとマップIDが変わるので、変数13番で取得される値が変わり、変数13番と14番の値が等しくなくなるので、条件の中に入って初期化されます。

これによって、マップを移動するたびに初期化、が可能になります。ただし、定期的に並列処理のイベントが増えると重くなるという症状も聞きますので、これを導入すべきかどうかは個人の判断でしょう。マップ移動のたびに初期化イベントを呼び出す方法の場合は、条件の中にある初期化の内容3行だけをコモンイベントにして、呼び出されたときのみにすればOKです。

運用方法

新しくマップを作るとき、イベント「技」は必ずコピーして持っていきます。

同じ敵を複製するときは、コピー&ペーストすればOKです。新しく敵を作る場合は、グラフィックや移動タイプを変更したり、触れたときのダメージ量や、2ページ目にある敵のHP(3以上の所)を変えたりすれば良いです。実際、基本的にはそのぐらいです。

コピー&ペーストしたとき、その敵のイベントIDをイベント「技」に控えます。イベント「技」の1ページ目の条件分岐の所をいじればOKです。例えばID5番~9番が敵、13番が敵、18番~35番が敵とかだと、こうなりますね↓

f:id:fermiumbay13:20190801132307p:plain

複製を連続的に行うと、ふつう連番で敵番号が決まりますので、とりあえず~~以上にしておいて、複製終わりのときのイベントIDを見て~~以下を決めれば比較的ほいほい作っていけると思います。

基本的にいじる必要があるのはイベント「技」の1ページだけ。新しい敵を作る場合は敵のグラフィックや移動タイプを4ページ分変更、2ページ目の敵HPに相当する値、4ページ目の触れたときにダメージ、を変えれば良いです。新しいマップを作る場合はイベント「技」を必ずコピーします。

これで基本的なことはすべてまかなえます。

これからはいくつか、応用編です。