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

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

アクションRPGの基礎(RPG2000)(基本編 要約)

過去ブログの転載です。

アクションRPGの基礎の、要約です。フィールド上の敵を、技を使って倒すゲームの基礎です。

(1/7) アルゴリズムを考える

fermiumbay13.hatenablog.com

「攻撃」をすることによって、攻撃の演出、対象者の探索を行います。攻撃が当たった対象者に、その攻撃相当のダメージを与えます。ダメージが既定値に達すると、その敵は倒れます。

ただ、ツクール2000における仕様上の問題がいくつかあり、簡単には実装できません。配列変数が利用できない問題は、例えば変数101番~変数200番までを敵のHPとして管理すると決めたら、それらにHPを格納し、指定した変数の番号の変数を参照することで、値を出し入れすることで解決します。条件分岐で使えるスイッチの番号に変数の指定ができない問題は、スイッチを使用せず、すべて変数で扱うことで解決します。また、倒れた敵を消すために一時消去の命令をしても、対象者を発見する命令で誤って発見してしまうことがありますので、倒れた敵はマップの隅に移動させ、攻撃が当たらないようにすることで解決します。

(2/7) 剣を振る

fermiumbay13.hatenablog.com

Enterを押すと剣を振る、というイベントを作ります。コモンイベントで「定期的に並列処理する」を開始条件にすることで常にキー入力の受け付けを行うことができます。これを利用してEnterを押したかどうかを判断します。Enterを押したら、「剣を振る」というスイッチをONにし、同時に現在の主人公の座標、向きを取得します。これらの情報は対象者を発見するときに必要です。

剣を振るスイッチがONになると、マップ上にある「技」管理用のイベントが起動し、向きに応じて剣を振るアニメーションを発生させます。それが終わると、剣を振るスイッチをOFFにし、攻撃のイベントを終了させます。

(3/7) 対象者を発見する

fermiumbay13.hatenablog.com

対象者を発見するには、「指定位置のイベントID取得」という命令を利用します。各イベントにはイベントIDというものが設定されており、それを確認することで対象者の有無が分かります。ここでは主人公の向いている前方横3マスを当たり判定とし、攻撃を行ったときにその3マスを一つずつ、上記命令によって対象者の有無を確認します。ただ、いちいちすべての座標で対象者の判断の命令を入れるのは面倒な上、冗長になりますので、剣を振らないときは2ページ目、振るときは3ページ目が起動するようにしておき、1ページ目に対象者の判断命令をまとめてしまっておくことにします。これによって、対象者を取得する場合にいじる必要があるのは1ページ目のみになり、容易になります。1ページ目を呼び出すには、「イベントの呼び出し」の命令を使い、
自分のイベントの1ページ目を呼び出すようにします。

(4/7) 敵の動作やHPの管理について

fermiumbay13.hatenablog.com

敵のHPを管理するための変数は、21番~100番までとします。ただし、HPそのものを格納するのではなく、「ダメージ量」を格納します。これによって、マップが変わったときの変数の初期化が容易になります。

「キャラクターの動作指定」を利用して、ダメージを受けたすべての敵が同時に動くようにします。ここでは「指定動作の全実行」を間に挟むことを行います。そのために、対象者すべての動作指定のあと、「技」管理用のイベントに処理を戻す必要があります。再度対象者のイベントを呼び出すため、発見した対象者のすべてのIDを変数に格納しておきます。

(5/7) 敵を吹っ飛ばす

fermiumbay13.hatenablog.com

敵イベントは通常2ページ目が実行されるようにしておき、1ページ目に吹っ飛ばす命令を入れます。敵に一定量ダメージを与えて倒れたら、ダメージ量が999999になるようにしておき、これを倒れた証として扱うこととします。発見した対象者がまだ生きている場合は(ダメージ量が999999でなければ)敵の1ページ目を実行します。そこでダメージ音やフラッシュ、吹っ飛ばしの動作指定を行います。

発見した対象者IDを控えるため、変数7番~9番に対象者IDを順番に代入していきます。すべての対象者の動作指定が終わったら、最後に「技」管理用のイベントに処理を戻し、「指定動作の全実行」によってすべての敵の動作が終わるまでウェイトします。

(6/7) 敵にダメージを与える

fermiumbay13.hatenablog.com

敵イベントに更に2ページ追加します。1ページ目はその5で作成した通りで、2ページ目にダメージ処理、消滅していく処理を作ります。3ページ目は完全に消滅させる処理を入れ、4ページ目は触ったときにダメージを受ける処理とします。「技」管理用イベントでダメージを与える処理のみ共通部分ですので、それをコモンイベントでまとめて作ることにします。変数7番~9番で控えた対象者IDのイベントを再度呼び出し、各2ページ目を呼び出して、その敵のダメージ量を増やし、既定値になると倒したことになります。その場合は、ダメージ量を999999にして、消滅し始めるようにします。
2ページ目の段階では、完全に消滅はしません。

また、3ページ目で呼び出すのはここで倒された敵のみですので、ダメージを与えることで倒せなかった敵は対象者リストから外します。

(7/7) 敵を完全に消滅させる

fermiumbay13.hatenablog.com

2ページ目に次いで3ページ目を呼び出します。ここで呼び出されるのは、2ページ目の処理で倒された敵のみです。イベントの位置を(000,000)に移動させ、一時消去することで、敵は事実上消滅します。

あとは4ページ目で敵に触れたときのダメージ処理や、マップ移動時の敵ダメージ量の初期化を行うようにすれば、基本の土台は完成します。敵はコピー&ペーストすれば複製できるので、そのときの敵IDがなんなのかだけ「技」管理用イベントに控えれば、それでOKです。