GBパロディウスの長いレーザーの表示処理の大まかな手順

グラⅡスレ(シューティングスレ) : ふたばに書き込む勇気がないので、ここで勝手に参加するブログ  より引用


1.RAMに処理の為のエリアを確保しておく(何故か42バイト)これが画面の横1ライン分に相当する

2.確保したエリアの中で相対的に見てレーザーの始点部分に相当するアドレスに、パレット4色共黒になるような命令を書き込む

3.同じくレーザの終点部分に相当するアドレスにパレットを元に戻す命令を書き込む
それ以外の部分は、何も処理しない命令(NOP)にしておく

4.レーザーを描写するラインで走査線割り込みがかかった時に1.で確保してるエリアに実行
するとLCDCが左から右に順次画面の1ライン分を書くと同時に、
プログラムは確保したエリアの命令を順次実行する事になる

5. 2.の部分を実行するとパレットは真っ黒になり、LCDCはその時点から画面に黒のみ出力するようになる

6.次に3.の部分を実行するとパレットが元に戻り、通常の出力に戻る

7.オプションがあった場合も同様、1.とは別のエリアを確保しておき同じような処理をする

8.レーザーが敵キャラや背景など何かしらに当たった箇所にスプライトで描いたエフェクトを重ねる

 

 

 GBは描画中にパレット書き換えられるのか…

 

wiki.nesdev.com

ファミコンはフレームの途中でパレットを変えるのに大きな制約がある

ゲームボーイの背景面とウィンドウ

 

https://wentwayup.tamaliver.jp/e448453.html

 

adventar.org

 

ファミコンで9×9ドット文字表示(ほか)
 

https://wentwayup.tamaliver.jp/e463913.html

 パレットについても書いてる

 

qiita.com

 

kyoske.sakura.ne.jp

VBlank期間の転送の詳しい話