Making「ActBarrier」その4

Home PC-6001mkII Program etc

Making「ActBarrier」 Top


2017/03/30:高速化その2
 現時点で、最大表示(敵32)すると1フレームで24〜30割り込みかかる。目標の19割り込みに近づけるべく、少し高速化を試みる。

 まずは1フレームで最大36回実行するキャラクタ表示処理かな。敵の色は背景と同じ黄色なので、敵のキャラクタ表示処理を分離して色変化処理を省略する。修正後実行してみると、1フレームで1割り込み弱減った位。

 ならば、1フレームで最大64回実行されるパーティクルだ。これまでパーティクル移動処理と表示処理を分けていたが、これを統合する事でループ処理分削減できるはず。結果は…1フレームで22(ほぼ23)〜27割り込み程度。

 次は、当たり判定テーブルの更新処理。これまで毎フレームで256x2バイトの初期化を行っていたが、これを前回設定した部分のみ初期化するよう変更する。結果は…20(ほぼ21)〜27割り込み。思ったよりは削減されなかったな。  さらに、全てのキャラクタが1ドット移動なのを利用して差分のみ更新するよう変更したが、さほど効果はなかった。

2017/04/03:パーティクルのバグ修正
 高速化を試みた辺りから、時々パーティクルが逆方向に流れることがある。

 どうやら、画面外に出たパーティクルが消えずにそのまま一周して再表示されたようだが、ソースを見返しても思い当たるフシはない。仕方ないので、エミュ上でステップ実行する。

 あれ?LD (DE), 00Hとなるはずが、LD C, (HL): NOPとなっている。なんじゃこりゃ?
 少しして、自分の方が間違っていることに気が付いた。LD (DE), 00Hのように、(DE)に固定値を入れるZ80命令なんかなかったよ。ということでサクッと修正して解決。思い込みは良くないな…。

2017/04/09:タイトル仮表示
 ペイントで描いたタイトルグラフィックをデータ化し、タイトル画面の表示テストを行う。

画像

 まだ仮表示のため上部分以外はまともに表示されていないが、まあこんなところかな。

2017/04/15:高速化その3
 パーティクルの移動/表示処理を見直す。

 これまで、データの並びをY座標,X座標,Y移動量,X移動量にしていたけれど、Y座標,Y移動量,X座標,X移動量の順の方が若干処理を速くできるのではないだろうか?という事で実践。
 割り込み的には、1フレームあたりの最大割り込み数27が26になった。少しは効果があったかな。やっぱりデータ構造は重要だ。

2017/04/20:文字表示
 少し大きめのカラフルな文字表示を行おう。

 文字のグラフィックデータは、2x2キャラクタに収まるように4x5dotで構成する。ペイントに単色レベルで作成した後、手動でデータ化する。
 これを、過去に作ったちび文字PUTの要領で左半分と右半分に色を分けて表示する。ということで、テスト表示。

画像

 まあまあ良い感じだ。

2017/04/23:タイトル画面作成
 これまで実行するといきなりゲームが始まる状態だったが、そろそろタイトル画面を経由しよう。
 ということで、タイトル画面にTOP3表示とキー入力処理を追加する。

画像

 画面を取ってから気づいたが、LANKINGではなくてRANKINGだったな…。まあそんなに影響があるわけでもないので、また後日直そう。

2017/04/29:ランダム不調
 自機が敵にぶつかってから、自機が爆発、ゲームオーバー表示までの処理を追加する。合わせて、ワーク領域の初期化ルーチンをプログラムで1回だけ実行する部分とゲームごとに行う部分に分離し始める。

 途中でテストプレイを行うと、なんだか様子がおかしい。プレイ時間とともに横からの敵が出現するはずだが、上からしか出現しない。そして、敵の出現位置もだんだんと同じ位置から表示されるようになる。なんなんだこれは?

画像

 注意深く乱数の処理を見ていくと、乱数用ワークテーブルの異なる位置同士を加算するところが、なぜか同じ位置同士の加算になっていた。どうやら初期化処理を移動させたときに勢い余って余分なところを初期化してしまったようだ。

 この機会に、初期化関連を少し整理しないとな。

2017/05/06:微修正その1
 パワー0のオプションと敵との衝突時、敵にダメージを与えていないのにパーティクルが出るのは不自然ではないか?ということで、パワー0の時のみパーティクルが出ないように修正する。

 次に、自機がオプション3つと重なっていれば無敵になるという問題を直そう。
 1フレームあたり、敵に4x3の12ダメージを与え、オプションと自機の当たり判定の差分2ドットを敵が進むのに8フレームかかるので、敵のHPが12x8+1=97以上だと自機が無敵にならない計算だ。

 ということで、敵のHPを90→100に設定する。テストしてみると、計算通り無敵にならないようになった。

 その他、クリア処理やランキング更新処理を入れる。入れたいものは一通り入ったので、あとは問題が出ないかプレイしつつ確認だ。しかし、せっかくクリア処理を作ったけど、難しくてクリアできない…。

2017/05/12:微修正その2
 今更ながらだが、ランキング更新の判定処理に問題があったので、修正を行う。

 スコアのデータ構成は10進でいう4桁(0〜9999)ごとに2バイトの管理だったため、スコアの大小判定も2バイト目、1バイト目、4バイト目、3バイト目の順に行うべきだった。ということで修正し軽くテストする。

 他は特に問題なさそうなので、これでP6オフに挑む。

画像


2017/05/13:P6オフ
 いつも通り、SDカードにプログラムを入れて、SD6031とともに現地に赴く。
 そして、いつも通り頃合いを見てプログラムを実行させる。

 ちょくちょくプレイの様子をうかがったが、クリアした人は誰もいなかった模様。やっぱりちょっと難しかったかな。


その3 Making「ActBarrier」