ウディタも主人公側の攻撃プログラムを行った。
次は敵の攻撃に入る。
敵の攻撃NPC
敵の情報については並列実行常時にしておこう。
初めにV変数で無敵時間を出している。
別のコモンイベント(敵の個別情報)にも影響を与えるため、
コモンセルフでなくシステム変数でやるべき。
無敵時間が1以上=1秒以上あるときにイベント中断を行い、
敵の攻撃を一切受け付けない状態にさせる。
続いて普通にやるとメニューを開いているときも敵は攻撃を行う。
メニューを開いているときは攻撃させないよう、
Sys変数の13番から0と同じ(イベント実行していない)を選ぶ。
イベント実行していないとき(=0)、
敵は主人公に攻撃できるプログラムを作っていく。
コモンイベント「あたり判定」をコピーして貼り付けるか、
ID番号と回数付きループ及び敵HPとマップID、影グラフィック番号をつける。
初めに影グラフィック番号が2以上は敵としてみなし、
0と1はアイテムなので「何もしない」よう分岐を行う。
影グラを設定しないとアイテムですら「敵」とみなされ消えるからね。
真ん中には敵HPのほか、主人公と敵の距離差をとり、
ある程度の距離以下だったらBGSを鳴らすようにしている。
私はバイオハザードだけでなくサイレントヒル(コナミ)も影響を受けている。
サイレントヒルといえば鉄パイプにラジオ、ライトだ。
ラジオの役割として私はラジオが鳴る演出をつけた。
いらないなら距離差は省いていいが敵HPだけは設定しておこう。
続いて攻撃ウェイトと無敵時間の二つに入る。
攻撃ウェイトとは敵が一度攻撃してから次の攻撃をとるまでにかかる時間であり、
ウェイトが0以下(というか0)になったら攻撃処理を行う。
攻撃ウェイトは0か上記以外で分岐を行おう。
ちなみに攻撃ウェイト及び無敵時間をはずして分岐を行うと、
敵は連続攻撃ができるようになるため、より難しくさせるなら外すのもありだ。
攻撃ウェイトも無敵時間も0になったとき、敵は攻撃できる。
攻撃する際、敵IDにそって攻撃処理を分担させる。
敵IDは上記画面右側にある「可変DB書込:ID番号」に数字を入れる。
可変DBにきちんとIDを作っておこう。
ID振り分け一覧はメモ帳よりユーザーDB一覧を見ると分かりやすい。。
上記は可変DBだけど赤く囲んだころ=IDとみればいいだけだ。
ID振り分けによって、個別の敵IDと数字が一致したらそれぞれに分ける。
敵攻撃例は下記に詳しく記すとして、敵から攻撃を受けたか、
攻撃処理を行ったら攻撃ウェイトを加算する。
敵IDによる振り分けを終えた後に敵攻撃ウェイト時間を足す。
私は固定時間60フレームと可変時間乱数を設けている。
秒数についてゲーム基本設定で30fpsを選ぶと1秒=30フレームになり、
60fpsを選ぶと1秒=60フレームとなる。
私の場合は1秒+乱数だけ攻撃ウェイトが置かれるのね。
攻撃ウェイトが加算されたので「上記以外」に入り1フレームずつ減っていく。
並列実行常時は上から下まで向い、最下にたどり着いたら上に戻る。
最後に敵HPが0になる=一つのエリアにすべて敵がいなくなるとラジオ音を止める。
敵の攻撃例
敵の攻撃は敵にプログラムを置く場合と、マップに仕掛けを置く場合に分ける。
主人公にとっての敵は「敵ID」だけでなくマップ上に仕組まれた罠でもある。
マップ上の罠については、各自工夫して作ってもらえばいい。
例えばあるマップを踏んだら地雷が発動する、飛ばされる、
離れていたはずの敵が目の前にいるなどだ。
これは役に立つぜhttps://t.co/BUhbqGslcb
— せんけん (@megabi0) December 7, 2019
プログラムで作る場合は乱数を調整して確率を作り、
ある数字を越えた場合に罠を発動させる。
後は主人公のあたり判定とほぼ同じやり方でいい。
上記ツイートに貼り付けた動画が罠づくりの参考になるよ。
付け加える部分として攻撃を受けた場合、
主人公を一定時間無敵にさせて攻撃をうけつけないところだ。
V2-7:無敵時間と設けて60を代入している。
先ほどNPCで無敵時間が0以上なので60は減っていく。
0に減るまでは敵の攻撃を受け付けないよ。
もちろん無敵時間という条件分岐から外れるプログラムを使えば、
無敵なんて関係なく攻撃されるようになるよ。
敵の攻撃は考えるだけで楽しいのだけど、
やりすぎると難易度がぐっと跳ね上がるので、気をつけてほしい。
基本は以上!
以上でARPGプログラミング講座-敵の攻撃と主人公の攻撃-を終える。
基本であり少しずつ改変していくといい。
また新しい情報が入ったら、新しい記事として加えていくよ。
ぐちゃぐちゃになりすぎて困ったらまた戻ってくればいい。
わかりにくいところもあるだろうけれど、
自分なりにあれこれ試行錯誤をこなし、世界観を形作ってほしい。
ちなみに私はゲームで表現したい世界の一部を先に絵で描き、
後でプログラミングとして舞台を作り敵を設定していった。
ゲームを作るほど「こうしたい、ああしたい」が出てくるので、
絶対忘れないように文でも絵でもいいからメモを取っておこう。
私のインスタストーリーではウディタによるプログラミングについても載せている。
というか載せていこうと思っている。
インスタ:こちらから見てね。
他にもプログラミングで悩んだらほかの人のやり方を見るか、
市販のプログラミング教材を読むなどして、独自の世界を作っていこう。