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

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

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

今回はとりあえず剣を振ってみるところまでだけやってみます。

f:id:fermiumbay13:20190801130430p:plain

まずはてきとうにマップを作っておきます。ここを戦場にするわけですよ。マップの名前はてきとうに……「草」という名前にしておきます。草とかいいながら島描いてますが、気にしないでね。

今回作りたいのは「攻撃」です。とりあえず剣を振らせてみることにします。Enterを押すと剣を振ることにしましょう。

さて、そうするにはどうすればいいでしょう?

キー入力を受け付ける命令に、「キー入力の処理」があります。これを利用します。基本的にどのマップでも攻撃をできるようにするため、このキー入力の処理はコモンイベントに作ることにしましょう。コモンイベントに新しく「キー入力」というイベントを作ります。

常にキー入力を受け付けさせるため、イベント開始条件を「定期的に並列処理する」にします。これと「自動的に始まる」は何が違うかというと、実行中に主人公が動けるかどうかです。
「自動的に始まる」にすると、主人公は操作不能になり、イベントの実行が優先されます。
「定期的に並列処理する」にすると、イベントが実行しながら主人公を動かすことができます。

出現条件スイッチを、スイッチ5番「キー入力受付」とします。オープニングでいきなり剣が振れたらまずいので、剣が振れるような状況になったらこのスイッチをONにします。今回はサンプルなので、あらかじめ初期設定としてONにしておきます(初期設定の仕方は後述)。

イベント実行内容を考えます。このイベントは、Enterを押したかどうかを判定し、押したなら剣を振ることにするため、キー入力があるかどうかを調べ、Enterが押されたなら「剣を振る」というスイッチをONさせます。よって、まずこのようなイベント内容になるでしょう。

◆キー入力の処理:[0001:キー入力:値]
◆条件分岐:変数[0001:キー入力:値]が5
 ◆スイッチの操作:[0001:剣を振る]をONにする
 ◆スイッチの操作:[0005:キー入力受付]をOFFにする
 ◆
:分岐終了

こうすれば、Enterを押すと剣を振るスイッチがONになり、キー入力受付をOFFすることで、キー入力を受け付けない状態になります。剣を振っている動作の最中に剣を振るなどしてはいけないので、受付を禁止させるのです。

Enterを意味するのは、5です。キー入力の処理でEnterが押されると、5になります。
なんで5なのかというと、下図にある通りです。

f:id:fermiumbay13:20190801130454p:plain

キーの名前の右に、それが押されたときに変数に代入される値が書いてあります。
これを参考にしましょう。ここで、入力を許可するキーを追加することで、Escを押すと別の技を出したり、というのも作れます。

「キーが押されるまで待つ」はどっちでもいいのですが、チェックを入れておいた方がいいでしょう。チェックが入っていると、許可しているキーどれかの入力があるまでイベントが止まります。そのため、↑このように「決定キー」しか許可しておらず、「キーが押されるまで待つ」にチェックが入っているなら、決定キーが押されるまでイベントが止まることになります。なので、このときに限り条件分岐をなくしてしまっても同じ動作をすることになります。

◆キー入力の処理:[0001:キー入力:値]
◆スイッチの操作:[0001:剣を振る]をONにする
◆スイッチの操作:[0005:キー入力受付]をOFFにする

↑これでもOKということです。この方がすっきりしていますね。ただ、別のキーの割り当ても決める予定があるなら、こうしてはいけません。(もしくは、別のキー用のイベントを新たに作ってもいいです)ここでは剣を振る動作しか作らないため、↑このように簡単化して書いていくことにします。
剣を振ると、主人公の座標、主人公の向きによって、対象者が決まります。そのため、剣を振る動作をさせるときにそれぞれの情報を変数に入れておく必要があります。

変数4番「攻撃x」、変数5番「攻撃y」、変数6番「向き」を用意して、それぞれに代入しましょう。

◆キー入力の処理:[0001:キー入力:値]
◇現在の場所を記憶:[0006],[0004],[0005]
◇変数の操作:[0006:向き]代入,主人公の向き
◆スイッチの操作:[0001:剣を振る]をONにする
◆スイッチの操作:[0005:キー入力受付]をOFFにする

↑さっきのイベントにこの2行(◇から始まる行)を追加してください。主人公の向きを変数に代入すると、下だと2、左だと4、右だと6、上だと8が入ります。テンキーの矢印と対応した番号になっています。

主人公の座標xは攻撃xに、座標yは攻撃yにそれぞれ代入すればいい話なのですが、「現在の場所を記憶」を使えばマップIDと座標xyが一気に代入できるので、例ではそう書いています。それぞれ代入してももちろんOKです。

マップIDの情報はいらないので、何かてきとうな変数に代入することにします。ここでは「向き」にマップIDを代入しています。どうせ後で本当の向きを代入するので、いいのです。もしくは、マップID、座標x、座標yの順で代入されていくので、座標xに代入する変数をマップIDに入れても構いません。

f:id:fermiumbay13:20190801130511p:plain

これでもOK。マップIDが代入されたあと、座標xが代入されるので、問題ありません。

初期設定として「キー入力受付」をONにしておくことを決めましたが、普通こういうものはオープニングの最初とか最中にするものです。ここでは応急処置的に、「黒」というマップを作ってそこで初期設定を行い、戦場へ移動させます。

f:id:fermiumbay13:20190801130530p:plain

初期設定のあと、「草」というマップへ移動させるようにします。座標(000,000)に「初期設定」というイベントを置きました。イベント開始条件は「自動的に始まる」です。

◆スイッチの操作:[0005:キー入力受付]をONにする
◆画面の消去:場所移動の設定
◆場所移動:0002:草(009,007)
◆画面の表示:場所移動の設定

そのスイッチをONにして、移動させるだけ。なんでもありません。

それでは実際に剣を振ってみましょう。剣を振る戦闘アニメは別途用意しておいてくださいね。今回は、主人公の向きによって4方向の戦闘アニメが表示されるものを作ります。戦闘アニメは「剣↓」「剣←」「剣→」「剣↑」の4種類。主人公のグラフィックは変わりません。もちろんなんとでも出来ますので、好きにアレンジしてみてくださいね。

マップの座標(000,000)に、イベントを置きます。とりあえずイベント名は「技」という名前にしておきます。なんでもいいです。イベント出現条件はスイッチ「0001:剣を振る」がONにします。キー入力でEnterを押すと、このイベントが始まるということになります。よって、イベント開始条件は「自動的に始まる」ですね。後はいいです。実行内容は、今回はまず剣を振るアニメーションを表示するだけなので、向きに応じて戦闘アニメが表示されるようにしましょう。

◆条件分岐:変数[0006:向き]が2
 ◆戦闘アニメの表示:剣↓,主人公
 ◆
:分岐終了
◆条件分岐:変数[0006:向き]が4
 ◆戦闘アニメの表示:剣←,主人公
 ◆
:分岐終了
◆条件分岐:変数[0006:向き]が6
 ◆戦闘アニメの表示:剣→,主人公
 ◆
:分岐終了
◆条件分岐:変数[0006:向き]が8
 ◆戦闘アニメの表示:剣↑,主人公
 ◆
:分岐終了
◆スイッチの操作:[0001:剣を振る]をOFFにする
◆スイッチの操作:[0005:キー入力受付]をONにする

↑戦闘アニメの、「アニメが完了するまでウェイト」のチェックは外した方が、かっこいいかもしれませんね。それが終わったら、剣を振るスイッチをOFFにし、再びキー入力を受け付けるようにするため、キー入力受付をONにします。

これでひとまず、振れるようにはなりました。これからイベントを編集していくことになりますよ。

次回は、敵を置いて、剣を振ったときに対象者を発見する所まで作ってみます。