2023年06月30日
Laboratoryテーマ6「自機に向かって飛んでくる敵弾」そのB
Laboratoryテーマ6「自機に向かって飛んでくる敵弾」そのB、最終回です。
前回は、BASICで組んだサンプルを公開しました。
今回はBASICで組んだサンプルを基に、マシン語に組み直しました。
考え方とロジックはそのまま、マシン語化しただけです。
ただ、まったくBASICと同じだとあまり面白くないので、SPRITEとFONTを設定し、キャラクタを8×8ドットを16×16ドットに変更。
さらに、敵が弾を16発撃つようにしました。
さすがマシン語、これだけ弾出しても速度的には余裕ですね。(これでもまだウェイト負荷掛けてあります。)
BASIC部分のサンプルプログラムです。
「STSMPL.BAS」【ダウンロード】
変数表です。
昔は手書きでしたが、便利な世の中になったものです…。
因みに昔製作途中で終わった、「SPACE WARS」と言うシューティングゲームのSPRITEを流用しています。
ロジックも、そちらから必要な部分だけ抜き取り加工しています。
マシン語のサンプルです。
起動すると、STSMPL.BINを作成します。
「BINSET.BAS」【ダウンロード】
「マシン語の割り算」の8ビットで計算しきれず、「マシン語の割り算(16ビット版)」に変更した時に、処理速度が遅くなると書きましたが、これだけ弾出してても、特に処理速度的な問題はなさそうです。
今回の主な用途はシューティングゲーム等の弾道計算用なので、弾幕シューティングでもない限り弾道計算がそこまで頻発することもないので、大して問題にならないと思います。
(MSXではSPRITEの制限(横4個(MSX2は8個)以上でチラつく、同時表示32個まで(走査線割込み使えば対応可ですが))の為、弾幕シューティング自体を私は見たことがない…。)
因みに、ここまでできれば、4方向弾、8方向弾、16方向弾はすぐできます。
簡単なのでちょっと撃ってみた。
では、前回記事で書いた通り、ここで一旦Laboratoryは中断して3DダンジョンRPGの制作に専念します。(2023年6月26日記事参照「開発案件広げすぎ…」)
再開後は、Laboratoryテーマ7「水平ライン4枚(MSX2は8枚)を超えてSPRITEを表示させたい」です。
MSXのSPRITEの弱点に、同一水平ライン上に4枚(MSX2は8枚)以上並ぶと、それ以上のSPRITEが表示されなくなると言った仕様があります。
その対処方法として、市販ゲームではキャラクタをチラつかせて、完全に見えなくなるのを防いでいます。
このテーマは、そのやり方です。