2021年03月06日

ReFIGHT(2)

  着手からだいぶ時間が経ってしまった ReFIGHT です。

  ReFIGHT でいろいろしている技術的な事を書いておきます。


○640x200x4色で動作
 MELT DOWNからそうですが、元の88版は 640x200x8色の内の2プレーンしか使っていません(移動するキャラクタのみ)。
 そのため、P6SRでも同じように640x200x4色にして動作させています。


○直接アクセスモードを使用
 P6SRでビットアクセスモードは便利なんですが、一度のアクセスが4ビット単位になるため、2倍の時間がかかります。
 VRAMアドレスの算出がやっかいなのですが、VRAMに直接アクセスする事で高速に描画するようにしています。


○アドレス変換テーブル
 88のReFIGHTのプログラムでは、キャラクタ描画の際は座標で指定するのではなく、VRAMアドレスで指定されています。
 これを座標指定にするのは、元プログラムの修正量が多すぎます。

 そのため、88のVRAMアドレス→座標に変換するのですが、80で割る、などの計算が入って時間を取られます。さらに、その座標をP6SRのVRAMアドレスに変換するのであまり嬉しくない状況です。

 今回、88のVRAMアドレス→P6SRのVRAMアドレスの変換のテーブルを作りました。
 まともに作るとメモリが足りないので2段階でテーブル引きをしています。


○データ圧縮
 今回、データ圧縮に lsza を使っています。
https://github.com/emmanuel-marty/lzsa/releases/

 Z80用の展開プログラムも別の方が公開されています。
https://github.com/uniabis/z80depacker/

 この中の unlzsa2_fast.asm をそのまま使っていますが、使っているアセンブラでエラーが出ないように修正しています。
 他の88ゲーム(Immediate)で使っていたのが大きな理由の一つです。
 (Immediateを移植しようとして断念したのはナイショ)


○タイトルとゲームフレームの変換
 ゲーム時のフレームやタイトル画面は、別のツールで書かれているようです。
 拡張子が.drw で何のツールか不明なのですが、展開ルーチンがメインプログラムに埋め込まれています。

 MELT DOWNのときは、そのプログラムにパッチを当てて、P6上で動作させていました。
 ReFIGHTでも同じようにしていたのですが、それだとディスクロードと展開がかなり遅くて、うーん、という感じでした。

 結局、展開プログラムを読み込んでZ80のエミュレートをするWindows上プログラムを作りました。
 その後、P6用に減色などの変換をした後に、lsza で圧縮しています。


○タイトル画面の背景
 88版では「ReFIGHT」のタイトル画面の表示の際、「ReFIGHT」の背景の緑色が右にスクロールしています。これは3プレーンの内、Gプレーンのみを右に1ドット単位でシフトしています。

 似たような様の事をP6SRの「ReFIGHT」のタイトル画面表示でやらせていますが、プレーン毎の操作はできず、扱うデータ量も大量なので、以下のようにして誤魔化しています。
 
 ・「ReFIGHT」の文字に赤色を使用しない(黒色、白色、水色のみ)
 ・8ドット単位で、赤色が使われていない部分のみをシフト対象にする
 ・右シフトは、8ドット単位で完結させる(画面全体が右シフトしないが、それっぽく動くのでヨシとする)。



  88版の作者のRONJIさんが、P6SR上で動く所が見たいとのことです。

  どなたか、可能なら動画をアップ頂けると助かります。

  とりあえず静止画を貼っておきます。

210306_02_ReFIGHT実行画面1.png
210306_02_ReFIGHT実行画面2.png
210306_02_ReFIGHT実行画面3.png
210306_02_ReFIGHT実行画面4.png
210306_02_ReFIGHT実行画面5.png

この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。