アクションRPGの基礎(RPG2000)(応用編 敵行動パターン)
過去ブログの転載です。
敵が複数の攻撃を使ってくる場合は、行動パターンを組み込んでそれぞれの技を発動させれば良いです。どんな行動パターンにするかは作者さん次第。ランダムに色々攻撃してきたり、交互にしてきたり、HPが減ると新しい技を使ってきたり……
ここでは、ランダムに炎とビームのどちらかを定期的に放ってくるようにしてみます。
イベント「炎+ビーム」(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になっています。
確率分布そのものを変えたい場合は、発生させる乱数も場合分けさせれば良いでしょう。