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

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

アクションRPGの基礎(RPG2000)(応用編 敵行動パターン)

過去ブログの転載です。

敵が複数の攻撃を使ってくる場合は、行動パターンを組み込んでそれぞれの技を発動させれば良いです。どんな行動パターンにするかは作者さん次第。ランダムに色々攻撃してきたり、交互にしてきたり、HPが減ると新しい技を使ってきたり……

ここでは、ランダムに炎とビームのどちらかを定期的に放ってくるようにしてみます。

fermiumbay13.hatenablog.com

fermiumbay13.hatenablog.com

イベント「炎+ビーム」(1ページ目、マップイベント、開始条件:定期的に並列処理する)

◆ウェイト:2.0秒
◆条件分岐:変数[0022]が999999以外
 ◇変数の操作:[0149:敵:行動パターン]代入,乱数[0~1]
 ◇条件分岐:変数[0149:敵:行動パターン]が0
  ◆変数の操作:[0141:敵:炎x]代入,EV0002のX座標
  ◆変数の操作:[0142:敵:炎y]代入,EV0002のY座標
  ◆変数の操作:[0145:敵:炎向き]代入,EV0002の向き
  ◆条件分岐:変数[0145:敵:炎向き]が2
   ◆変数の操作:[0142:敵:炎y]加算,1
   ◆
  :分岐終了
  ◆条件分岐:変数[0145:敵:炎向き]が4
   ◆変数の操作:[0142:敵:炎x]減算,1
   ◆
  :分岐終了
  ◆条件分岐:変数[0145:敵:炎向き]が6
   ◆変数の操作:[0142:敵:炎x]加算,1
   ◆
  :分岐終了
  ◆条件分岐:変数[0145:敵:炎向き]が8
   ◆変数の操作:[0142:敵:炎y]減算,1
   ◆
  :分岐終了
  ◆変数の操作:[0143:敵:炎元x]代入,変数[0141]の値
  ◆変数の操作:[0144:敵:炎元y]代入,変数[0142]の値
  ◆効果音の演奏:炎2
  ◆イベントの位置を設定:炎,(V[0141],V[0142])
  ◆スイッチの操作:[0021:敵:炎出す]をONにする
  ◆
 :分岐終了
 ◇条件分岐:変数[0149:敵:行動パターン]が1
  ◆スイッチの操作:[0009:敵:ビーム発射]をONにする
  ◆効果音の演奏:アップ
  ◆キャラクターのフラッシュ:EV0002,1.0秒(W)(全部31)
  ◆変数の操作:[0018:敵:ビームx]代入,EV0002のX座標
  ◆変数の操作:[0019:敵:ビームy]代入,EV0002のY座標
  ◆変数の操作:[0020:敵:ビーム向き]代入,EV0002の向き
  ◆変数の操作:[0146:敵:ビーム残りマス数]代入,20
  ◆条件分岐:変数[0020:敵:ビーム向き]が2
   ◆戦闘アニメの表示:ビーム↓,EV0002(ウェイトなし)
   ◆
  :分岐終了
  ◆条件分岐:変数[0020:敵:ビーム向き]が4
   ◆戦闘アニメの表示:ビーム←,EV0002(ウェイトなし)
   ◆
  :分岐終了
  ◆条件分岐:変数[0020:敵:ビーム向き]が6
   ◆戦闘アニメの表示:ビーム→,EV0002(ウェイトなし)
   ◆
  :分岐終了
  ◆条件分岐:変数[0020:敵:ビーム向き]が8
   ◆戦闘アニメの表示:ビーム↑,EV0002(ウェイトなし)
   ◆
  :分岐終了
  ◆繰り返し処理
   ◆条件分岐:変数[0020:敵:ビーム向き]が2
    ◆変数の操作:[0019:敵:ビームy]加算,1
    ◆
   :分岐終了
   ◆条件分岐:変数[0020:敵:ビーム向き]が4
    ◆変数の操作:[0019:敵:ビームx]減算,1
    ◆
   :分岐終了
   ◆条件分岐:変数[0020:敵:ビーム向き]が6
    ◆変数の操作:[0019:敵:ビームx]加算,1
    ◆
   :分岐終了
   ◆条件分岐:変数[0020:敵:ビーム向き]が8
    ◆変数の操作:[0019:敵:ビームy]減算,1
    ◆
   :分岐終了
   ◆指定位置の地形ID取得:(V[0018],V[0019]),[0017:地形ID]
   ◆条件分岐:変数[0017:地形ID]が1以外
    ◆繰り返し処理の中断
    ◆
   :分岐終了
   ◆現在の場所を記憶:[0147],[0147],[0148]
   ◆条件分岐:変数[0018:敵:ビームx]がV[0147]と同値
    ◆条件分岐:変数[0019:敵:ビームy]がV[0148]と同値
     ◆効果音の演奏:しびれ2
     ◆キャラクターのフラッシュ:主人公,0.5秒(赤31緑0青0強さ31、ウェイトなし)
     ◆キャラクターの動作指定:主人公,ジャンプ開始,180度方向転換,一歩前進,ジャンプ終了
     ◆HPの増減:メンバー全員のHPを5減らす
     ◆繰り返し処理の中断
     ◆
    :分岐終了
    ◆
   :分岐終了
   ◆変数の操作:[0146:敵:ビーム残りマス数]減算,1
   ◆条件分岐:変数[0146:敵:ビーム残りマス数]が0以下
    ◆繰り返し処理の中断
    ◆
   :分岐終了
   ◆
  :以上繰り返し
  ◆スイッチの操作:[0009:敵:ビーム発射]をOFFにする
  ◆
 :分岐終了
 ◆
:分岐終了

2ページ目は炎の発射の所で紹介しているものと完全に同じなので、コピーしてください。

とっても長いように見えますが、炎とビームの処理をコピーしてきて↑◇の所(3つしかないね)を追加しただけです。すでにどちらの処理も出来ているなら、一瞬で作れるでしょう。

2秒間隔でどちらかの攻撃を放ってきます。敵が生きていると変数149番「敵:攻撃パターン」に乱数0~1を代入し、0だったら炎の処理、1だったらビームの処理を行わせるようにしています。乱数とはランダムな数のことです。0~1の乱数を発生させるということは、0または1のどちらかの値が代入されるということです。0~100とかすれば、0~100までの101個の数からどれか選ばれることになります。0~1の乱数を発生させる場合は0になる場合と1になる場合が同確率ですので、炎とビームがどちらも同じ確率(50%)で発生することになります。

炎の頻度の方が多くしたい場合は例えば乱数を0~4にして、0~2のときは炎、3~4のときはビーム、という風にすると、炎の方が多くでることになります。炎の確率が60%、ビームの確率が40%になりますね。

設定するときは、

条件分岐:2以下{
 炎の処理

条件分岐:3以上{
 ビームの処理

とすればいいですね。

3つ以上技があって、技Aが20%、技Bが50%、技Cが30%としたい場合は、0~9の乱数を発生させ、

条件分岐:1以下{
 技Aの処理

条件分岐:2以上{
 条件分岐:6以下{
  技Bの処理
 }

条件分岐:7以上{
 技Cの処理

と設定すればいいことになります。だいじょうううぶですね。更に敵の残りHPによって分けたい場合も同じように作れます。

例えばはじめ、技Aが30%、技Bが70%であったものが、敵ダメージ量が5以上になると技Aが30%、技Bが30%、技Cが40%としたい場合、0~9の乱数を発生させて、

条件分岐:行動パターン2以下{
 技Aの処理

条件分岐:行動パターン3以上{
 条件分岐:行動パターン5以下{
  技Bの処理
 }

条件分岐:行動パターン6以上{
 条件分岐:敵ダメージ量5以上{
  技Cの処理
 }
 それ以外の場合{
  技Bの処理
 }

みたいにすればいいですね。0~2のとき技A、敵ダメージ量が5未満のときは3~9のとき技B、敵ダメージ量が5以上のときは3~5のとき技B、6~9のとき技Cになっています。

確率分布そのものを変えたい場合は、発生させる乱数も場合分けさせれば良いでしょう。