“RUN” それは魔法の言葉

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

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

無事コンテストにも応募できたので、途中で止めていた開発の過程を書いて行こうと思う。ってほとんど読まれてないけどw
前回はCSVデータを読み込んで、ステージごとの各種データを変更できるところまで書いてきた。

ここまでくると、ゲームの骨格は出来上がったので、友人たちにもテストプレイしてもらったりしたが、この先に取り掛かるのには時間がかかった。
自宅の引っ越しがあり、約1か月半ほど、プログラムを1文字も書けない状況になった。
新居に引っ越して、以前よりも快適な生活環境でプログラムができるはずなのに、まぁ触らないw
結局、コンテストの締め切り2か月前の9月から本格的に作業を再開した。
閑話休題

CSVデータで読み込んだ項目はこんな感じ。

ステージ番号 ボーナスステージフラグ 細胞出現数
細胞の色 細胞の速度 出現間隔(フレーム)
耐久度 方向 追尾有無
追尾回数 ステージクリア占有率 ダメージ回復量
使用武器 ステージ色  

以前書いてなかったこととして、細胞の動きには、いくつかのバリエーションを持たることを目標にしていた。
単純に前から直進してくるだけのゲームは、1面で飽きるはずw(と、言いつつ2面も正面から直進なんだけどww)

そこでステージごとに、前後左右、その組み合わせの8方向から出現するようにした。
といっても、それほど難しいことではなく、方向ごとに細胞が出現するX、Y座標を決めてあげるだけ。
さらに、ランダムにいろんな方向から登場するモードも作った。

;方向ごとの出現位置
cellx=0:celly=0
cell_dir = stage_cell_dir
if cell_dir=8 : cell_dir=rnd(8)

switch cell_dir
  case 0 ;下
    celly=0
    cellx=rnd(40)*20
    cellx=limit(cellx,32,800-32)
  swbreak
  case 1 ;右下
    if rnd(2)=0 {
      cellx=rnd(35)*20
      celly=0
    } else {
      cellx=0
      celly=rnd(45)*10
    }
    cellx=limit(cellx,0,800)
    celly=limit(celly,0,500)
  swbreak
  case 2 ;右
    cellx=0
    celly=rnd(35)*20
    celly=limit(celly,32,600-32)
  swbreak
  case 3 ;右上
    if rnd(2)=0 {
      cellx=rnd(35)*20
      celly=600
    } else {
      cellx=0
      celly=300+rnd(21)*10
    }
    cellx=limit(cellx,0,800)
    celly=limit(celly,0,600)
  swbreak
  case 4 ;上
    celly=600
    cellx=rnd(40)*20
    cellx=limit(cellx,32,800-32)
  swbreak
  case 5 ;左上
    if rnd(2)=0 {
      cellx=rnd(35)*20
      celly=600
    } else {
      cellx=800
      celly=300+rnd(21)*10
    }
    cellx=limit(cellx,0,800)
    celly=limit(celly,0,600)
  swbreak
  case 6 ;左
    cellx=800
    celly=rnd(30)*20
    celly=limit(celly,32,600-32)
  swbreak
  case 7 ;左下
    if rnd(2)=0 {
      cellx=100+rnd(35)*20
      celly=0
    } else {
      cellx=800
      celly=rnd(21)*20
    }
    cellx=limit(cellx,0,800)
    celly=limit(celly,0,600)
  swbreak
swend

そして、実際の移動は、自機ショットの時にも使った、es_adir命令を使う。
coro3.hatenablog.jp

es_adir命令では、スプライトを動かす方向と、1フレーム当たりの移動量を設定するのだが、ここでは素直に0を下方向として定義に使ったので、単純にCSVに設定した方向値を8倍することにした。移動量も早い、遅いを決めるのはCSVに定義した細胞の速度の値を使用する。
こんな感じで、移動の設定を行った。

es_adir cnum,cell_dir*8,stage_cell_sp ;進む方向