無事コンテストにも応募できたので、途中で止めていた開発の過程を書いて行こうと思う。ってほとんど読まれてないけど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 ;進む方向