Making「SBFZ」その2

Home PC-6001mkII Program etc

 このページでは、移植開始からの過程を書いています。

Making「SBFZ」 Top


2010/08/14〜21:分割PUT
 タイトル画面でスペースキーを押した後の初期設定から順に実装していく。とりあえずの目標は、分割PUTと呼ばれている処理だ。

 初期設定の中には一部用途が良くわからない部分があるが、そこはとりあえず棚上げしておく。とりあえず分割PUTの直前まで動く事は確認したが、「ちゃんと」動いているかはまだわからない。

 というわけで、いよいよ分割PUT処理だ。この処理に限らず、表示部分は大まかにMZ-700の処理の流れを踏襲しつつ、1からmkII用に作り直す必要がある。

 元の分割PUT処理の大まかな処理は、こんな感じだ
  • 事前に準備されているX,Y位置の情報を1組ずつ読み込む
  • X,Y情報を描画先VRAMアドレスに変換 (CALL 0FB4H ?)
  • ワーク用の背景画面から4x4の領域をVRAMに転送していく
  • 1〜3 をループ
 どうせ処理を作り直すので、1と2の処理を一緒にしよう。データにはVRAMアドレスへの変換後の値を入れて、アドレス変換処理を省略する。
1面の背景も再作成し、いざ実行!

画像

 あれ、なんか微妙に違う。なんで描画されないはずの画面上下部分まで上書きされるんだろう?

 処理を少しずつ追っていって、ようやく原因がわかった。なぜか縦4回,横4回の二重ループをした上で4キャラクタ分をLDIR, LDDRしていた。これだと結果的に4x16キャラクタ分を描こうとしてしまう。という事で修正...

画像

 これでよし。

 4x4描画してからのウェイトだが、MZ-700と同じ(60x256ループ)だとちょっと遅すぎるので、とりあえず半分(30x256ループ)で様子を見ることにする。

2010/08/22:オパ
 続いて、自機の表示に移る。色部分の仕様はかなり異なるので、この部分を根本から考える事にする。

 原作では、1キャラクタの色部分描画を以下のようにしているように見える。
  • 色部分のbit 3が立っていたら、描画せず次のキャラクタに進む
  • 色部分のbit 7が立っていたら、背景色部分(bit 4〜6)を透過
  • 色部分を描画
 この bit の判定だが、mkIIでは8bit全て使われてるので、他の手段を使う必要がある。あと、自機の表示では必要がないかも知れないが、文字色の透過も考えに入れる。キャラクタセットの関係で、文字色と背景色を入れ替える場面も出てくるからだ。

 というわけで、mkIIではこんな流れに変更する。
  • 色部分のbit 0〜3が全て0なら文字色部分を透過
  • 色部分のbit 4〜6が全て0なら背景色部分を透過
  • 色部分を描画
 背景色に黒(=0)が出せなくなるが、ここはひとつデータの中にないことを祈ろう。

 さて出来た、表示を確かめてみる。...なんか色の透過具合がおかしいな。
少しして、またやってしまった事に気がついた。同じアドレスでも読み取りと書き込みは別々の場所を指すんだってば。

 仕方ない、透過時は背景のワークエリアから取って来るようにしよう。

画像

 今ひとつわかりにくいが、特に間違ってはないように見える。これでようやくオパ…じゃなくて自機を動かすことができるぞ。

2010/08/26〜28:自機移動
 次は自機の移動を作成する。合わせて、二画面切り替えの連続実行を試す。

 自機の移動は、キー入力方法の違いと移動範囲の調整のみで出来るので、割と楽にできた。二画面の切り替えも、過去のソースの流用なのでこれも割と楽。というわけで出来た。
 と思いきや、せっかく二画面切り替えをしているのに自機辺りがチラチラする。ああ表示画面を間違えたな...修正。

 自機の表示が出来たらやはり攻撃もしたくなるので、自機の弾発射/移動/表示の処理も組み込む。

 いざ実行!おお3連射が出来るようになった。

画像

 次はいよいよ敵キャラだ。こうやってちょっとずつ出来ていく過程が楽しい。

2010/09/01〜03:基地表示
 さて、いよいよ敵キャラの表示だ。

 敵のキャラクタ表示部分はザコ、基地、親玉で共通処理になっているようなので、ここで如何に速度を稼げるかが重要となる。

 原作では1x1の文字部分と色部分のそれぞれで以下の処理をしているようだ。
  1. ウィンドウチェック(画面外判定)
  2. 座標→アドレス変換
  3. (色部分のみ)背景への透過処理
 まず、1. は文字部分と色部分で結果は変わらないはずなので1つに出来るだろう。
 次に 2. は、1.の判定に必要な部分を別レジスタに入れておく事で1回で済むだろう。
 最後の 3.は、mkIIでは文字部分の透過も入るので少し遅くなりそうだ。

 という考え方でキャラクタ表示処理を作成し、基地の移動/表示処理を加えて表示を確かめる。

画像

 ...左の基地はともかく、右の基地が文字化け状態になる。その他、画面の左に基地が移動すると、いきなり消えてしまう。
 文字化けだが、困った事にたまに起こる。見た目からではさっぱり原因がわからないので、少しずつ実行していく。
 どうやら、分岐先を誤っているのと、分岐先によってアドレスを進める処理が抜けていたことが原因だったようだ。というわけで修正。

 次に、左端でいきなり消える現象だが、アドレスへの変換でX座標がマイナスの場合の考慮を忘れていたようだ。これも修正。

 ついでに透過処理も少し修正する。はじめは文字色部分の透過は背景の文字色部分にしていたが、若干の違和感があるため背景の背景色を透過させるようにする。

画像

 できた。ちなみに、基地の移動/表示処理はMZ-700から変更なしであっさり動いた。次はザコ敵の表示だな。

2010/09/05:敵表示
 ザコ敵の表示を行うとするか。

 ザコ敵の処理は、一気にコピーする範囲が大きいく躊躇していたのだが、そんな事を言っているといつまでたっても先に進まない。という事で、一気に実装することにする。

 まず敵の初期化処理をまとめてコピー。...特に変な挙動はないようだ。ただ、まだ表示を行っていないので本当にうまく行っているかはわからない。

 次に、敵の表示と移動処理をコピーっと。

画像

 キャラクタが出来てないのと、表示位置が若干ずれていることを除けば大丈夫そうだ。この辺りを修正する。mkIIで使用不可の文字があるけどそれなりにごまかして...。

画像

 やった!ザコ敵が表示されると一気に画面がにぎやかになった。

2010/09/08〜09:コリジョンその1
 自機の弾発射が出来て敵も表示された、となると、次は当り判定だろう。

 まず自機弾と基地との辺り判定を入れる。基地の爆発キャラデータと当り判定処理を加える。

画像

...少し画面下にゴミキャラは残るが、まだY座標のクリッピング処理をしていないので仕方ないか。後日直すことにしよう。

 調子に乗って、自機弾と基地との当り判定も加える。こちらも特に問題はなさそうだ。

 動作速度の方はまだ大丈夫のようだが、あと敵弾やボスやアニメ処理があるのでまだまだ油断できない。

2010/09/10〜15:コリジョンその2
 敵弾と自機との当り判定を入れるため、敵弾の処理を追加する。

 敵弾の表示処理は1キャラ分なので、敵表示ルーチンから不要な処理を削って作成...わりとあっさり出来上がった。
 加えて、敵弾と自機、敵と自機の当り判定を加える。ここは同じ処理で良いので楽だ。

画像

 心配だった処理速度だが、この時点で原作の動画よりほんの少しだけ速い程度だ。まだアニメとBGMを入れていないんだけどな...。

 自機の爆発処理も進めようと思ったけど、色反転部分をどうしようか...。まあでも、自機爆発を加えると以降のデバッグに支障が出るので後回しにしておこう(^_^;)。


その1 Making「SBFZ」 その3