何とか庵日誌

本名荒井が毒にも薬にもならないことを書きつづるところ

「ブロック軍団の逆襲」

f:id:fukenko:20200505225923p:plain


 というわけで「アクションゲーム38」から、今回は「ブロック軍団の逆襲」です。
 スクリーンショットをご覧になれば、もうどういうゲームかはおわかりでしょう。いわゆるインベーダーゲームです(おい)。本作の紹介文では「ひとことで言うならインベーダータイプのゲーム」と説明されています。
 ルールは至ってかんたん。砲台を操りミサイルを発射して、上から迫り来るブロックインベーダーの軍団を殲滅しましょう。敵は撃墜されたタイミングで弾を撃ってくるので、当たっても油断ができません。今やおなじみの撃ち返し弾というやつですな(おい)。全滅させれば次の面へ。被弾したり敵の侵略を許してしまうとゲームオーバーです。
 他の「アクションゲーム38」収録作同様、本作もスプライト・PCG未使用、ノーマルキャラのみで構成されています。だからといって内容も貧弱なんだろうと決めてかかるのは早計です。本作は簡素なプログラムならではの工夫によって、なかなか遊べるゲームに仕上がっているのです。


f:id:fukenko:20200505230852p:plain
プログラムを中断して種明かし。
表示幅を狭めることでそれらしく表示する技に目から鱗
 敵が多数出現するゲームでは、通常、出現する敵ごとに表示や判定をするのがあたりまえになっています。しかしその分処理が増えるため、プログラムの容量や動作速度で不利になります。特にBASICでは遅くてゲームにならないなんてことになります。
 しかし本作では、敵を文字列として扱うことで、その問題を解決しています。ブロック軍団の状態は60文字分の文字型変数に格納されています。MSX-BASICのWIDTH命令で画面表示幅を狭めた上で、ひとつずつ座標をずらしながら件の文字型変数を画面に表示するとあら不思議、「スペースインベーダー」のごとく隊伍を組みながら下に迫ってくるように見えるという寸法です。
 敵とミサイルの当たり判定はVRAMのパターンネームテーブルを参照し、撃墜された敵を消す処理は文字列の該当部分をMID$で空白に書き換えることで実現。さらなる処理の簡略化とプログラムの高速化を計っています。
 これら手法のおかげで速度も操作性は十分。「スペースインベーダー」よりぐっと簡略化されていながらも、それらしいやりとりが楽しめます。簡素ながら効果的な工夫の数々に、市販ソフトの超絶技巧に負けない感銘を受けます。