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

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

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

前置きはおしまい。作ってみましょう。ダメージを事実上与えるのはまだですが、とりあえず敵を吹っ飛ばします。

対象者(敵)をとりあえず2ページ編成にしておき、対象者の1ページ目でダメージの処理&フラッシュ等を行い、イベント「技」で「指定動作の全実行」を行います。

イベント「技」と同様、1ページ目は「イベントの呼び出し」でのみ実行できるようにします。2ページ目が敵の普通の挙動。ランダムに動かしたり、好きにしてよいと思います。敵に触れてこっちがダメージを受ける場合の処理も2ページ目に作りますが、後にします。

対象者の番号を控える変数として、ここでは3マスを当たり判定としているので、3個の変数を用意します。変数7番~9番をそれぞれ「攻撃対象:敵1」「攻撃対象:敵2」「攻撃対象:敵3」という名前にしました。そして、その敵番号を取得するための一時変数として、変数10番を「敵番号」としました。変数10番「敵番号」に、何番目の変数に対象者IDを控えるかの番号を代入します。ということで、まずは変数7番からですから、変数10番には7を入れます。

イベント「技」3ページ

◇変数の操作:[0007~0009]代入,0
◇変数の操作:[0010:敵番号]代入,7
◇指定動作の全解除
◆条件分岐:変数[0006:向き]が2
 ◆戦闘アニメの表示:剣↓,主人公

   …
   …

↑先頭に、◇から始まる3行を追加します。まずは変数7番~9番を初期化(0を代入)し、変数10番に7を入れます。これから指定動作の全実行をするため、念のために全解除を入れておきます。あってもなくても変わらない気もしますが、気持ちの問題です。

次に、対象者のイベント1ページ目を起動するため、イベント「技」1ページを変更します。

◆指定位置のイベントID取得:(V[0004],V[0005]),[0002:対象者]
◆条件分岐:変数[0002:対象者]が2以上
 ◇スイッチの操作:[0002:対象者発見]をONにする
 ◆
:分岐終了
◇イベントの呼び出し:対象者発見

↑◇は、変更、追加部分です。指定したIDの対象者を作ったら、「対象者発見」というスイッチをONするようにします。これだけ、その都度変更する必要があります。そして、対象者1ページ目を起動するという各マップの共通処理は、コモンイベント「対象者発見」というものを作り、そこにまとめておくことにします。単に、作るとき見栄えをよくするためです。しなくてもいいことです。

コモンイベント「対象者発見」(呼び出されたときのみ)

◆条件分岐:スイッチ[0002:対象者発見]がON
 ◆スイッチの操作:[0002:対象者発見]をOFFにする
 ◆変数の操作:[0011:敵ダメージ量代入用]代入,20
 ◆変数の操作:[0011:敵ダメージ量代入用]加算,変数[0002]の値
 ◆変数の操作:[0011:敵ダメージ量代入用]代入,変数[V[0011]]の値
 ◆条件分岐:変数[0011:敵ダメージ量代入用]が999999
  ◆イベント処理の中断
  ◆
 :分岐終了
 ◆変数の操作:[0003:イベントページ]代入,1
 ◆イベントの呼び出し:V[2][V[3]]
 ◆
:分岐終了

イベント「技」1ページで対象者を発見すると、対象者発見スイッチがONするので、条件分岐の中に入り、同時にスイッチをOFFします。

f:id:fermiumbay13:20190801131857p:plain

その4で述べたように、敵HPではなくダメージ量を記憶し、変数に入れます。発見した敵の現在ダメージ量を調べるため、変数11番「敵ダメージ量代入用」というものを用意します。イベントID 1番の敵のダメージ量を変数21番とするので、「20+対象者番号」の番号の変数の値が、対象者の現在ダメージ量です。よって、「敵ダメージ量代入用」にまず20を代入し、それに対象者番号を加算して、「敵ダメージ量代入用」の番号の変数を、「敵ダメージ量代入用」に代入します。

これで、「敵ダメージ量代入用」には対象者の現在ダメージ量が入ります。

f:id:fermiumbay13:20190801131916p:plain

現在ダメージ量が999999だと「倒した」という印にしておきます。そのため、万が一対象者が999999であったなら倒れているので、攻撃の処理を施す必要がありません。よって、そのときは「イベント処理の中断」をします。そうでなければ、見つかった対象者番号のイベントIDのイベント1ページを起動します。変数3番「イベントページ」に1を代入し、イベントID変数2番の変数3番ページを呼び出すようにすればOKです。ここが中々ややこしい処理ですね……

次いで、敵の動作指定を作ります。敵はすでに置いてあるかと思いますが、複数いる場合はとりあえず1体だけにしてあとでそれを複製するようにしましょう。

「ページの新規作成」を押して2ページにします。1ページ目に動作の設定をし、2ページ目は何もいじりません。

たとえば1ページ目はこんな感じにします。キャラクターの動作指定では、頻度8、動作繰り返しOFF、移動できない場合は無視ONにしています。

◆効果音の演奏:ダメージ1
◆キャラクターのフラッシュ:このイベント,1.0秒(赤31緑0青0強さ31、ウェイトなし)
◆条件分岐:変数[0006:向き]が2
 ◆キャラクターの動作指定:このイベント,ジャンプ開始,下に移動,ジャンプ終了
 ◆
:分岐終了
◆条件分岐:変数[0006:向き]が4
 ◆キャラクターの動作指定:このイベント,ジャンプ開始,左に移動,ジャンプ終了
 ◆
:分岐終了
◆条件分岐:変数[0006:向き]が6
 ◆キャラクターの動作指定:このイベント,ジャンプ開始,右に移動,ジャンプ終了
 ◆
:分岐終了
◆条件分岐:変数[0006:向き]が8
 ◆キャラクターの動作指定:このイベント,ジャンプ開始,上に移動,ジャンプ終了
 ◆
:分岐終了
◆変数の操作:[V[0010]]代入,変数[0002]の値
◆変数の操作:[0010:敵番号]加算,1

まずダメージ音、フラッシュという演出を行います。次に、主人公の向きに応じて弾かれる方向にジャンプさせました。向きに応じて変えるのではなく、「主人公の逆を向く」「一歩前進」とすることもできます。ダメージを受けて散らばる感じになるので、この方が良いという場合はそうしてみましょう^^

そして、対象者のIDを変数7番~9番に格納します。

f:id:fermiumbay13:20190801131935p:plain

「変数10番の番号の変数」に、対象者のIDを代入します。その次に、変数10番を1加算します。ややこしいですねぇ。まずは変数10番に7が入っているので、7番の変数に対象者IDが代入されます。その後、変数10番の値は7+1=8になります。次に対象者が発見されたときは、変数10番に8が入っているので、8番の変数に対象者IDが代入されます。その後、変数10番の値は8+1=9になります。その次は……もういいですね。こうすることで、まるでスタックみたいに変数を入れていくことが可能です。

最後に、イベント「技」3ページに「指定動作の全実行」を追加します↓

   …
   …
 ◆
:分岐終了
◇指定動作の全実行
◆スイッチの操作:[0001:剣を振る]をOFFにする
◆スイッチの操作:[0005:キー入力受付]をONにする

これでOKです。実際にやってみましょう。攻撃を与えた敵すべてがダメージ音と共に吹っ飛べば成功です。