“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

137.HSPでゲームを作ろう:培養臼(BAIOUS) その14

細胞の動きの続き。前回は、出現位置と方向を設定できるようにした。
今回は、細胞が自分に寄ってくる追尾の動きについて。

といっても、すでに標準スプライト機能の勉強を始めた時に作った、某キューブなプログラムでも使っている、es_aim命令で簡単に実現できた。
coro3.hatenablog.jp

細胞を最初に動かすのは、es_adir命令で実行。そのスプライト番号を調べた状態で、es_aim命令を実行すると、動作が上書きされる。
だが、フレームごとに毎回es_aim命令を使ってしまうと、とんでもなく凶悪な追従エネミーになってしまうので、細胞が新たに出現するタイミングで、自機の方向に追尾して動くようにした。
面倒なのでw画面内に存在する細胞は、一斉に追尾するように、ループで処理を作った。

ただし、膨らんだ細胞まで追尾させると、吸着せず、クリアできなくなくなるので、一度も膨らんでない細胞だけを追尾させた。
こう書くと処理が大変そうだなと思うのだが、これまたes_type命令で設定できるタイプ番号があれば簡単だった。

以前のエントリーで、細胞の段階ごとに別々のタイプ番号を割り当てたと書いた。
 未膨張の細胞:4
 膨張した細胞:8
 吸着した細胞:16

細胞のスプライトは、200番から割り当てて表示しているので、200から順にループさせる。
es_find命令でタイプ番号が4のスプライトが存在すれば、対象をピックアップ出来たことになる。
うん。標準スプライト機能、便利だぞ。

さらに、細胞のスプライトには、ユーザで設定できるESI_OPTIONに、追尾するかのフラグ、追尾する回数をそれぞれセットしている。
対象をピックアップして、追尾するフラグが1で、かつ追尾回数が1以上の時だけ処理するようにした。
処理には、こんな感じ。

;細胞の追尾処理(細胞出現のタイミングで動かす)
if stage_cell_tra=1 { ;追尾フラグが1の時のみ
  n=200:pt=0
  repeat
    es_find n,4,n ;タイプ4を対象にする(膨らませたら移動方向は固定)
    if n=-1 : break
    es_get opt,n,ESI_OPTION
    ;細胞スプライトに設定された追尾回数を取得
    tranum=get_spOpt(opt,TRA_NUM)

    ;追尾回数が1以上なら、現在の自機の方向に追尾
    if tranum>0 {
      tranum--
      es_aim n,px,py,stage_cell_sp ;自機の座標に向かって移動する
      ;減算した追尾回数をユーザ定義に戻す
      opt=set_spOpt(opt,TRA_NUM,tranum)
      es_setp n,ESI_OPTION,opt
    }
    n+
  loop
}

前回の出現方向と、今回の追尾する動きを組み合わせることで、ステージのバリエーションを作りやすくなった。