中ボスの秘密

Ver1.54で、中ボス複数同時出現の解禁。
元から中ボスは最大4機出現可能だったけど、X座標が被ってしまう問題があったので封印していました。
このたびのBug修正で、一緒に対応できたので新たな実装ではなく解禁です。
中ボスが複数同時に出ているとプレイは若干難しくはなりますが、ホーミングミサイルの配点を増やすことで補填したつもり。
以下、なんで中ボスが4機なのかについて。


ゲーム中のキャラクターは1つの2次元配列 dim ev,8,256 で情報を管理しています。
この配列は1キャラあたり8個の整数型変数(32バイトの連続領域)を使えるように割当てが決まっています。
使い道は順に、キャラクターの状態カウンタ、X座標、Y座標、向き、速度、属性値、耐久値、点数。
8個の変数セットをキャラ番号順に並べているというイメージです。使うときはDupします。
キャラ番号0は自機の位置計算に固定で使用し、1〜255をその他のキャラクターで使用します。
ゲーム中のキャラ移動、描画は、キャラ番号順に行われます。
描画はキャラ番号の順に進んでいきますので、地上の砲台がまず描画されて、そのあと雑魚、中ボス、ボス胴体、ボス頭部と重ねて描画されていきます。(その後、敵弾類)


上の配列の用途に属性値がありますが、これによりキャラの動き方や使う画像などが決まります。
例の画像サンプルを見るとわかると思いますが、使用する画像は属性値順に並んでいます。
0は自機、1敵レーザー、2ミサイル、3砲台、4反転雑魚、5回転雑魚、6追尾雑魚、7直進雑魚、8ボス胴体、9ボス頭部。
属性値はキャラ番号から計算で生成しています。式は、属性値= -5+SQRT(CNT+64) です。
0は自機固定で128〜255は敵弾などの用途にリザーブしているので、キャラ番号1〜127について計算してみると、

属性値
キャラ番号 1〜11 12〜30 31〜51 52〜74 75〜99 100〜126 127
個数 11個 19個 21個 23個 25個 27個 1個

となります。
属性値3〜9が割り付けられて、属性値9がキャラ番号127の1個になるように、式のパラメータを決定してあります。


敵の生成では次キャラと自分が同じ属性値になるならフォーメーションで発生させるという仕組みを入れてあるため、キャラクターが生きている間だけ属性値が有効であって欲しいので、例の配列に格納しています。
この他にキャラ番号から求めるものとして、雑魚かどうか(大型キャラか通常か)という情報があります。
本来はボス描画のための情報で、大型キャラとして拡大描画し自機との当たり判定を大きくとるための区別です。
属性値が決まる前に使うことがあるので、ループ内で毎回計算しています。
ふつうなら100〜127に限定するか、127以下で属性値8か9と判断するところですが、サイズ肥大の予防で式は ezak=CNT/32!3 としました。ezakが1なら通常キャラ、0なら大型で、キャラ番号96〜127が大型に相当します。
先ほどの属性値に当てはめてみると、属性値8と9(キャラ番号127)のボスパーツは全部大型扱いになりましたが、
属性値7は75〜95が通常、96〜99が大型になります。
つまり、25個ある属性値7のキャラクターのうち、4個は発生させると大型キャラで描画されてしまうわけです。


で、せっかく大きく描画されるのだから中ボスとして扱うことにしたわけです。
中ボスが直進雑魚の拡大描画なのは、これが理由。
といってもこれだけでは拡大描画のみの違いですから、動作や出現タイミングを別扱いにするためには、中ボスかどうかを識別する情報も必要になります。
X軸の重なりの問題があるうちは、esbm=cnt=96 で1キャラだけ有効にしていましたが、Ver1.54では esbm=(cnt/4=24) として96〜99の最大4機分の枠を全て中ボス出現につかっています。


ちなみに、キャラ番号128〜255が敵弾類に割り当てと書きましたが、ここでも属性値の別があります。
0が回復アイテム(これはgrectで別途描画)、1と2は先に書いたとおりレーザーとミサイルです。
ただ、こちらの範囲では完全にランダムに利用するキャラ番号を決めています。