Making「ActBarrier」

Home PC-6001mkII Program etc

関連リンク (P6)ActBarrier

最新の画面 更新日:2018/08/19
作成日:2018/06/24

2017年のP6オフ会で公開したネタ「ActBarrier」の作成過程を以下少しずつ書き綴っていこうと思います。

2017/03/19:オプションHP
 次に、オプションのHPを実装する。

 原作のHSP版はというと、オプションHPの初期値255、最大300、敵にオプションが当たる毎に-1、自機と重なると1フレーム毎に+5となっている。また、オプションパワーはオプションHPを64で割った商としている。

 HSP版は約60fpsに対し、P6版では25.6fps(予定)なので、フレームレートは倍近く落ちる。まあ、HPが半分になるよう調整するか。という事で、初期値127、最大値150、敵に当たると-1、自機と重なると1フレーム毎に+5とする。

 まずは、パワー部分を実装。5種類のオプションキャラパターンを用意し、オプションHP/32を元にキャラ番号を設定する。

 次に、これまで敵にオプションが当たった時の敵のダメージ量を可変(=オプションのパワー)に変更し、オプションのHPを減らす処理を追加する。

画像

 うん、まあまあ良い感じだ。

 ついでに、敵の移動速度も自機の1/4に変更する。敵の移動処理にかかる時間を少しでも平準化するよう、最大32体の敵を8体ずつ4つのグループに分けて、1フレームで1グループずつ順繰りに動かす事にする。これで、敵の移動処理部分だけだが処理負荷が減る。

2017/03/18:スコア
 スコアの表示について考える。

 最初のHSP版で100万点台が出ている事を考えると、P6版でも最低7桁のスコア表示は実現したい。この場合、スコアが2バイトの範囲を超えるため処理が面倒な事になる。ただ、ここはこのゲームの肝の部分の一つでもあるので何とかしたい。

 表示処理を簡潔にするため、スコア部分8桁を上4桁と下4桁で分け、それぞれを2バイトで管理するようにする。スコアの表示ルーチンも、4桁分(0000〜9999)の表示を行う処理とし、上位4桁と下位4桁で2回に分けて表示を行う。

 上位2バイトと下位2バイトがそれぞれ0〜9,999の値を持つ事になる。ただし、下位2バイトはスコア加算等で一時的に10,000以上の値を持つ。この場合は、上位2バイトへの繰り上げ処理を行って、表示時には0〜9,999の範囲に収まるようにする。

 簡単にスコア表示処理を作成し、暫定的に敵にオプションが当たった時に1,001点ずつ加算してスコア表示を確認する。

画像

 よしよし、上位4桁への繰り上げ表示も正常に行われているようだ。

2017/03/14:敵撃破その2
 出現数が意図せずカウントダウンする原因が分かった。

 HPが0の敵は表示対象からは除いたのだが、移動や当たり判定は続き、かつ画面外に出ても消えないゾンビ状態となっていた。このゾンビ状態の敵を再度撃破する事で、出現数がさらにカウントダウンされていた。

 原因がわかればあとは簡単だ。HPが0の敵は移動や当たり判定の処理を行わないようにする。これでOKかな。

 次に、これまでHP=1としていた敵のHPを3に変更してみる。すると、今度は明らかに3回以上敵にオプションが当たっているのに撃破されない。HP=2にすると、たまに撃破される。どうやら、1つの敵に2つ以上のオプションが重なっているときは撃破されるようだ。

 これってつまり、実質敵のHP減算結果を覚えてなくて、直近のダメージがHP以上の時のみ撃破されているよね。という事で、HPからダメージ量を減らした値を保存するよう修正する。

 これでひとまずOK。

2017/03/12:敵撃破その1
 さて、次は敵の撃破判定だ。オプションの攻撃により敵のHPが0以下になった場合、敵のHPを0にして敵の削除を行う。

 すると、敵が一斉に消えたり、動かない敵が残るといった不可解な現象が起こり始めた。原因を調べた結果、条件によって、敵の管理領域の参照先アドレスが誤っていた。という事で修正。

 これで解決と思いきや、今度はしばらく動かしていると敵が出現しなくなる現象が発生した。処理上、現在数出現数が最大出現数以上になるとそれ以上出現しないようにしているので、おそらく出現数が実際と異なっているのだろう。

 出現数を見ていくと、たまに必要以上にカウントダウンされているようだ。これが繰り返された結果、出現数が0を通り越して255になったのが直接の原因のようだ。ただ、なぜ必要以上に出現数がカウントダウンされたかがわからない。

2017/03/12:敵追加
 いよいよ敵の追加だ。はじめは上から移動してくる敵を考える。

 敵の管理領域は、HP,Y座標,X座標,キャラクタ番号,Y移動量,X移動量 6バイト構成にする。256バイトだと最大で42種類の敵を管理できるが、プチコンmkII版に準拠して32種類までの管理とする。

 余談ながら、「Y座標,X座標,キャラクタ番号」の並びは、最初に作成したキャラクタ表示ルーチンの都合による。またキャラクタ表示ルーチンを使いまわすため、自機とオプションも「Y座標,X座標,キャラクタ番号」の並びにしている。

 敵の初期値は、暫定的に以下を入れる。HP:1、Y:1AH(Y表示範囲上端 - 6)、X:乱数値の下5bit + 20H、キャラクタ:00H、Y移動量:1、X移動量:0

 敵の最大出現数(32)と現時点の出現数を設け、最大出現数に達しない場合に敵を追加し出現数をカウントアップする。また、移動により敵が画面外に出た場合に、敵の削除を行う。これで、最低限の動きになるかな。

画像

 自機と同じ速度で動くため敵が速すぎるが、とりあえず敵の出現と削除の部分はうまく動いているようだ。

履歴

ページ項目
その1 2014/12/xx:はじめに
2017/01/xx:発掘
2017/02/10:6パターン
2017/02/10:座標変換
2017/02/18〜19:キャラクタ表示
2017/02/26:画面外
2017/02/26:表示テスト
2017/02/27:高速化その1
その2 2017/02/28:コリジョンその1
2017/03/01:オプション
2017/03/04:パーティクルその1
2017/03/05:パーティクルその2
2017/03/05〜07:コリジョンその2
2017/03/11:乱数

PC-6001mkII