Making「ActBarrier2」その2

Home PC-6001mkII Program etc

Making「ActBarrier2」 Top


2017/11/26:ソース見直し
 なんだかんだで1ヶ月空いてしまった。色々細かい部分を忘れていたので、マシン語ソースを全体的に見直す。

 改めて見てみると、敵の有効・無効判定がNO=0であったりHP=0であったりするなど統一されていなかったので、条件を統一するよう変更する。

2017/12/02:風呂敷広げ
 少しやりたいことが増えてきた。
  • 敵の種類は最低でも10種類、できれば20種類作りたい。
  • シューティングゲームっぽくボスも作りたい。
  • 面は、5面位は欲しい。
 メモリが足りるのかどうかや、敵のネタをそこまで作れるのかといった問題はあるが、一応の目標として追加しておく。

2017/12/04:キャラクタデータ展開用領域の枯渇
 4種類目の敵グラフィックデータを作成したあたりで、早くもキャラクタデータ展開用領域に限界が近づいて来た。

 前作の流れでキャラクタデータ展開用領域には1.5KBを確保していたのだが、グラフィックデータ1つあたり展開後の容量が96バイト(16バイト×6種類)になるため、このサイズだと自機・オプション・敵用に実質16キャラクタしか定義できない。

 まあ、キャラクタデータ展開用領域を広げるしかないのだが、さすがに際限なく増やす訳にはいかない。どこか落としどころを見つけなきゃなと思いつつ、一旦棚上げしておく。

2017/12/06:敵作成(3種類目)
 3種類目の敵の移動処理を作成する。

 キャラクタデータは前作のキャラクタを流用して、時計回りに90度ずつ大きく回りながら移動するようなイメージだ。

画像

 これが大量に出たら、大きな渦巻きみたいな感じになるかな?

2017/12/09:敵出現フォーマット(Ver2)
 今の敵出現フォーマットおよび出現処理だと、敵出現後すぐに次の種類の敵が出現する。もっとこう「間」を持たせたいな。

 「間」として、以下の2つができるようにしたい。
  • 画面上の敵が一定数未満になるまで待つ
  • 一定時間待つ
 処理は後で考えるとして、敵出現のフォーマットをどうしよう。とりあえず、1バイト目の値によって役割を変えることにする。
1バイト目2バイト目
Ver.100H〜FFH:敵番号(1〜255)上位3bit:出現数(1〜7)
下位5bit:出現周期(1〜31)
Ver.200H〜7FH:敵番号(1〜127)上位3bit:出現数(1〜7)
下位5bit:出現周期(1〜31)
80H〜99H:アクティブな敵数が(値 - 80H)未満になるまで次の敵の出現を待つ(なし)
9AH〜FFH:(値 - 99H)フレーム分だけ次の敵の出現を待つ(なし)

 これらのデータを元に、敵出現を待つ処理を追加する。

2017/12/10:敵作成(4種類目)
 4種類目の敵を作成する。

 この敵は、画面上からX座標内側方向に段々寄ってくる動きをさせたい。
 敵のY座標-18Hをカウンタ(WK2)に足しこんでいき、WK2が桁あふれしたときに横方向の移動(出現時に、WK1に定義している)を行う。縦方向は常に1ドットずつ下に移動する。

画像

 割と怪しいアルゴリズムだが、動かしてみればそれなりに違和感なく動くもんだな。

2017/12/29:自機爆発の修正
 自機爆発時に自機から出すパーティクルの位置が合っていないバグの修正を行う。

 バグの原因はわかっている。パーティクルの開始座標に、自機の"相対座標"を使っていたからだ。このため、パーティクルの出現位置は自機の表示位置からオフセット分だけずれて表示される。

 "相対座標"にオフセットを足して解決、ではあるのだが、この機会に自機の"絶対座標"も情報として追加しよう。きっと他の場面でも"絶対座標"が役に立つときが来るだろう。

2018/01/09:敵出現フォーマット(Ver3-Final)
 面の出現フォーマットだが、肝心なものがなかった。データの終わりだ。これがないと、面を区切ることができない。

 影響なさそうなところで、FFHを割り当てることにする。こんな感じかな。
1バイト目2バイト目
Ver.200H〜7FH:敵番号(1〜127)上位3bit:出現数(1〜7)
下位5bit:出現周期(1〜31)
80H〜99H:アクティブな敵数が(値 - 80H)未満になるまで次の敵の出現を待つ(なし)
9AH〜FFH:(値 - 99H)フレーム分だけ次の敵の出現を待つ(なし)
Ver.300H〜7FH:敵番号(1〜127)上位3bit:出現数(1〜7)
下位5bit:出現周期(1〜31)
80H〜99H:アクティブな敵数が(値 - 80H)未満になるまで次の敵の出現を待つ(なし)
9AH〜FEH:(値 - 99H)フレーム分だけ次の敵の出現を待つ(なし)
FFH:データの終わり(なし)

 これらのデータを元に、敵出現を待つ処理を追加する。

2018/01/09:敵作成(5,6種類目)
 敵から別の敵を発射したい。具体的には、ミサイルを撃つ敵を作りたい。

 ミサイルを撃つ敵5の出現・移動処理と、ミサイルである敵6の出現処理を作成する。敵6の移動処理は、最初に決められた方向に直進するだけなので、敵1の移動処理を流用する。

 さて、敵6の出現処理に、どうやって出現位置(=敵5の座標)を伝えるか。敵の処理で使ってなさそうなレジスタを探すと、C'レジスタがあった。今回はこれを使おう。
 C'レジスタに、発射元である敵5の管理用アドレス下1バイトを格納し、敵6の出現処理を呼び出す。敵6の出現処理でこのC'レジスタの値を参照し、敵5の管理データより座標を読み出して、敵6の出現座標として設定する。まあこんなところだろう。

 まだ敵のグラフィックデータを作ってないので見た目の違和感があるが、うまく動いているようだ。

画像


2018/01/11:キャラクタデータ展開用領域拡張
 以前に棚上げしていたキャラクタデータ展開用領域について考える。

 自機とオプションで6キャラクタ費やすし、これからボスを追加することを考えると、やっぱり足りないな。
 ということで、これまで1.5KBだったキャラクタ展開用領域を倍の3KBに増やす。これで32キャラクタ分入る計算だ。

 とはいえ、この時点で自機+オプション5種類+これまでに作った敵キャラクタ8種類の計14種類なので、これでもまだ心許ないけれど。


その1 Making「ActBarrier2」 その3