ARPG講座も3回目になった。
続いてはあたり判定に入る。
あたり判定のやり方
初めに主人公の武器設定から入る。
Cs2に武器の種類(武器ID)を入力しておくと、
IDに応じた武器の攻撃力で敵にダメージを与えられる。
ユーザーDBから武器の情報を呼び込み、
主人公の可変DBに攻撃力を足していくのを確認してから、
非常に重要なID設定を行う。
私の場合、0番は敵のデータを入力させないようにしている。
仮に0番から入力する場合はCs10=-1+0に設定してから、
回数付きる^プを使って数を足していくといい。
Cs10は何のためにあるか?
マップイベントに応じたマップIDの数だけ足していくのだ。
他に可変DBにある敵一覧のデータ情報を参照するためにも使う。
あまり使わないなら回数ループは30程度で十分だが、
私の場合はある一か所のイベントに50も使ったので、
回数ループを50回に定めている。
また敵の可変情報は主人公ステータス0番をコピーし、
開いているタイプ(私の場合は23番)に貼り付けた。
サンプルゲームからすぐデータを入力するなら20番で十分だと思っている。
以下、敵のHPやマップIDを入力していくのだが、
途中にあるV2-2「敵HP」変数は私の間違いだから無視してOK。
様々なIDの部分に
Cs10のマップID、Cs10の影グラフィック番号と入力していく。
マップIDによる敵の入力方法
ここでマップイベントに代入する敵の処理について書く。
初めに敵を倒した後の処理として、ページ(名前の下にある番号)を二つ使用する。
後に述べる「イベントの一時消去」でも敵を消せるのだが、
一時消去だとマップを変えたら何度も復活する。
一度倒したら復活させないためにページを二つ用意する。
ちなみに敵を倒すとは敵HPが0以下になる状態を示す。
続いて移動ルートはプレーヤー接近であり、
コモンイベントで並列常時実行にした状態で敵の移動を調節できるが、
コモンイベントだとすべての敵が同じ行動をとってしまう。
全てという言葉は誤解があるね。
例えばスライムという敵に対し、あるスライムだけはランダムに動かし、
他のスライムはプレーヤーを見て襲ってほしい。
スライムでも動きを別にするならコモンイベントより、
マップIDごとに直接入力したほうがいいと私は判断した。
次に影グラフィック番号はシステムデータベース(赤アイコン)9番にある、
影グラフィック番号から、それぞれ敵を選ぶ。
影グラフィック番号の役割は後で核として、1ページ目の記述として、
- 変数操作+:セルフ変数8にマップID代入
- 可変DB書込で真ん中を上記のセルフ変数9=マップIDにし、敵HPの数値を入力
- 最後に敵ID番号を代入していく
マップイベントIDは変数0以外なら何でもいい。
0を使っていけない理由は後で述べる。
続いて敵HPを読込でなく「書き込み」にして入力すべし。
書き込んで敵のHPを「あたり判定」に定義した敵HPへ加算するわけだ。
DB可変書き込みがないと、可変DBに入れたHPがそのまま入ってしまう。
例えば上記画像だと40という数値を書き込んだ。
しかし可変DBには10という文字が入っている。
書き込みがなければHPは10として処理される。
また敵HPは必ず数字で一つずつ書くべし。
ユーザーDBなどからも引用できるのだけど、
一匹倒れたらほかの敵もみんな消えてしまうため、個別にHPを入れねばならぬ。
最後のID番号は可変DBの「タイプの内容設定」をおして、
何も書いていないところ「無効」となっている部分を選び、
変数を推して「IDと定義をし、閉じる。
上記の通りにやると3ページの59番に「ID」が入力されているはず。
入力した後は一度の処理を終えるたびにデータを更新させるため、
一度攻撃された後、続いて攻撃を受けた後にきちんとHPが減るよう、ループ処理を創るわけだ。
必ずウェイト1フレームを置かないと、重くなりすぎてエラーを起こす。
絶対にウェイト1フレームを入力しておこう。
最後に起動条件は「並列」にしておけば終わり、次に2ページ目へ入る。
2ページ目は基本、何も入れない。
起動条件も「決定キーで実行」にすればいいのだけど、
セルフ変数0が1と同じ状態にチェックを入れねばならぬ。
敵を消す処理としてセルフ変数0を使うから、
先ほどのマップイベントIDは0以外を使ってほしいのだ。
上記画像を見ると、色々入れているね。
上記はボス専用であり、ボスを倒したらイベントを発動させる。
私の場合はボスを倒したら次のマップに移るよう設定をしているが、
その場にとどまるなら敵2ページ目にイベントを入れた後、
そのままセルフ変数0=2にし、3ページ目を作ればいいと思う。
もちろん3ページ目は何も入れない。
セルフ変数0の処理についてはあたり判定に戻るよ。
敵のHPなどで条件分岐を促す
もう一度あたり判定画像を載せる。
敵HPは二つに分岐させている。
1以上と1未満(=0以下)だ。
敵HPが1以上の時「敵がいるぞ」という知らせであり、
「このマップイベントIDは敵だ」という判断でもある。
先に1未満の処理から見ていこう。
1未満は敵を消すだけであり、そのまま一時消去……を行うと、
アイテムも「敵」とみなされて消される恐れがある。
そこで影グラフィック番号で条件分岐を促す。
影グラフィック番号でも「敵影」かどうかを判定する。
ウディタ初期値は0番が人間、1番が影なしとなっている。
そこで0と1は「敵でない」と判定させる分岐を作る。
反対に言うと、2以降はすべて「敵」としてみなす。
影グラフィック番号が1超えとは敵とアイテムの判定に使う。
影グラフィック番号が2以降だと「敵を消す」よう働かせる。
イベント制御からキャラ動作指定を選び、
先ほど定めたマップIDを選び、上記画像赤く囲んだ部分、
「変数の設定」でセルフ0に1を代入する。
代入は=であり、加算は+=だ。
後は透明化や悲鳴を上げるといったSEを代入するなど演出すればいい。
続いてHPが1以上の時、敵キャラの画面XY座標を定義し、
武器エフェクト(銃攻撃なら銃弾座標)XYをエフェクトから引っ張ってくる。
引っ張り方はこちらを参照。
敵の座標と武器エフェクトの座標を引いた場合、
マイナスの数値をプラスに変えるため絶対値を使う。
絶対値は攻撃範囲を決める際に重要となり、
画像では差額XYとなっているね。
差額X及びYの最小値は4であり、増えていくにつれ遠くからでも攻撃が当たる。
ちょうど12から24くらいがいいと思う。
勉強っと
【第7回】ウディタ実況講座「アクションRPG編(2/4)」 https://t.co/KIw7380J1b #sm18691847 #ニコニコ動画— せんけん (@megabi0) December 6, 2019
あたり判定の解説はほぼこちらを参考にしているよ。
ウディタの場合、座標マイナスは左上、プラスは右下と抑えておこう。
後は敵の攻撃が当たったら敵にヒットを示すエフェクトを出しつつ、
敵別によって反応を変える処理=影グラフィック番号による条件分岐を行い、
一度目の攻撃を終えさせる。
途中に書いてある小刀所持と乱数は「会心の一撃」を出す方法と抑えてほしい。
確率でクリティカルヒットを出すやり方である。
影グラフィック番号処理
影グラフィック番号は敵によって攻撃を受けたときの対応を分けるのであり、
すべて一本化させるなら特に必要ない。
影グラフィック番号処理が少なければ、あたり判定に書いてもいい。
私の場合は敵が多いので、一つずつ処理を作った。
あたり判定から引っ張ってきた影グラフィック番号で分岐し、
同じく引っ張ったマップIDに敵が攻撃を受けたときの処理をすればいい。
一歩引く、SEを変える、透明化させるといった具合だ。
敵の処理は異常で終了だ。続いてNPCこと敵の行動について書きたい。