敵仕様

各種パラメータ

項目名 CSV 実行時 補足
敵ID id eid
HP hp hp
最大HP - hpmax HP初期値
攻撃力 attack attack 体当たり時の攻撃力
移動速度 speed move_speed
旋回速度 rspeed rot_speed
移動開始角度 rstart rot_start 移動を開始するプレイヤーとの角度差。rot < rstart であれば移動する
視界 view view 行動を開始するプレイヤーとの距離
射程距離 range range 攻撃を開始する射程距離
射程角度 rrange rot_range 攻撃可能なプレイヤーとの角度差。rot < rrange であれば攻撃する
攻撃間隔 atk_wait atk_wait 攻撃後の停止フレーム数
初回の状態 fstate first_state プレイヤーを発見して最初にとる行動。状態定数 (ENM_ST_*)は下記の動作仕様を参照

動作仕様

stateで状態遷移を行う

stateの値 概要 ユーザ定義関数 詳細
0 (ENM_ST_IDLE) 待機 ev_user0 何もせず、じっと静止している
1 (ENM_ST_CHASE) 追跡 ev_user1 プレイヤーに向かって移動
2 (ENM_ST_ATTACK) 攻撃 ev_user2 プレイヤーに向かって攻撃
3 (ENM_ST_ESCAPE) 逃走 ev_user3 プレイヤーとは逆方向に移動
4 (ENM_ST_INTERCEPT) 迎撃 ev_user4 離れて攻撃。または移動方向を先読みしてトラップの設置など
5 (ENM_ST_AROUND) 囲む ev_user5 プレイヤーの周りを囲むように移動
- ダメージリアクションev_user12プレイヤーから攻撃を受けた時のリアクション

状態遷移図

fsm.png

メモ

  • 逃走ルーチンはプレイヤーのストレスになる場合は採用しない
  • 周りに敵(味方)が多い場合は突進タイプ、少なくなったら臆病タイプに切り替わる、というロジックもいいかもしれない
    • その逆もありかも。
  • 迎撃トラップとは、一定時間後に炸裂する爆弾などの配置
    • 先読みルーチンはプレイヤーの数フレーム前の移動量から移動先を推測する
  • 囲むルーチンは、プレイヤーと自分とを結んだ線の直角方向に移動する
  • HPの残量によってタイプを切り替えるのもあり
  • 怒りモードで攻撃方法そのものが変わる、というルーチンを中ボスやボスには採用したい
    • ザコはHP低めなので不要

敵関連スクリプト一覧

スクリプト名 説明 用途・呼び出し元引数1引数2引数3引数4引数5引数6
enemy_init メンバ変数初期化 Createイベント eid(敵ID)
enemy_setParam CSVからパラメータを取得して設定enemy_init()内 eid(敵ID)
enemy_getAim プレイヤーへの方向を取得 移動方向の判定・決定 -
enemy_getAimDistanceプレイヤーへの距離を取得 移動の判定・決定 -
enemy_checkHitOther 他の敵との衝突チェック Stepイベント(共通) -
enemy_bulletAim プレイヤーへ向けて弾を撃つ (狙い撃ち弾)攻撃モード speed(速さ)timer(消滅までのフレーム数
enemy_bullet 弾を撃つ (角度指定) 攻撃モード rot(発射角度)speed(速さ)timer(消滅までのフレーム数)
enemy_updateTimer 各種タイマーの更新 Stepイベント(共通) -

タイマー変数一覧

  • tPast : 経過時間(フレーム数)
  • tDamage : ダメージタイマー(ヒットエフェクトやダメージ受けた判定で使用)
  • tHitWall : 壁にぶつかったタイマー(壁を避けて移動するルーチンで使用)
  • tAttack : 攻撃ウェイトタイマー(攻撃後の待ち時間として使用)